この記事は何か?
Python で Socks プロキシを経由して目的とするサーバにアクセスする方法について書いた記事である。わたしは Python 3.8
環境で実験したけれど、Python 3 系であればバージョンを問わず同じように動かせるはずである。
具体的なコード
requests と PySocks が導入された状態で、次のようにプロキシの設定をする。なお、Socks プロキシそのものを作成する方法はこちらの記事を参考にしてほしい。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
proxies = {
'http' : "socks5h://localhost:1080",
'https' : "socks5h://localhost:1080"
}
requests.get('http://somewhere.example.internal/ping', proxies=proxies)
何がハマりどころかというと、Socks プロキシの記述で socks5://localhost:1080
ではなく、socks5h://localhost:1080
としなければならない点である。そうでない場合、DNS での名前解決をローカルで行うため、Failed to establish a new connection: [Errno 8] nodename nor servname provided, or not known
のようなエラーメッセージを見ることになる。