from http.client import HTTPConnection
from urllib.parse import urlparse, urlencode
import socks
url = urlparse("http://final.destination.example.com:8888/")
conn = HTTPConnection('127.0.0.1', 9000) # use socks proxy address
conn.set_tunnel(url.netloc, url.port) # remote host and port that you actually want to talk to
conn.sock = socks.socksocket() # manually set socket
conn.sock.set_proxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9000) # use socks proxy address
conn.sock.connect((url.netloc, url.port)) # remote host and port that you actually want to talk to
request_path = "%s?%s" % (url.path, url.query)
conn.request("POST", request_path, post_data)
作为对Khue Vu答案的后续,这里有一个完整的例子,使用SOCKS代理的细节比预期的要复杂。
首先安装PySocks:
然后,在实例化HTTPConnection并通知它将使用代理之后,需要手动设置SOCKS代理:
注意上面的导入是python3.x
如果要使用http代理,应该如下所示:
如果您想使用SOCKS代理,可以使用SocksiPy,就像在这个问题中一样:How can I use a SOCKS 4/5 proxy with urllib2?
看来正确答案是:
http://bugs.python.org/issue11448#msg130413
相关问题 更多 >
编程相关推荐