-->

隧道httplib的通过代理(Tunneling httplib Through a Proxy)

2019-06-26 18:15发布

我试图找出如何通过代理的数据发送到服务器。 我希望这将有可能通过TOR但作为TOR使用SOCKS它显然是不可能的httplib的(纠正我,如果我错了)

这就是我现在所拥有的

import httplib
con = httplib.HTTPConnection("google.com")
con.set_tunnel(proxy, port)
con.send("Sent Stuff")

问题是,似乎当隧道设置为冻结。 谢谢你的帮助。

Answer 1:

如果你想使用HTTP代理,它应该是这样的:

import httplib
conn = httplib.HTTPConnection(proxyHost, proxyPort)
conn.request("POST", "http://www.google.com", params)

如果你想使用SOCKS代理,你可以使用SocksiPy作为这样一个问题: 我如何使用SOCKS代理4/5与urllib2的?



Answer 2:

貌似正确的答案是:

http://bugs.python.org/issue11448#msg130413

import httplib
con = httplib.HTTPConnection(proxyHost, proxyPort)
con.set_tunnel("www.google.com", 80)
con.send("Sent Stuff")


Answer 3:

作为后续奎武的回答,这里有一个完整的例子,得到这与SOCKS代理工作的细节更复杂的超过预期。

首先安装PySocks有:

pip install PySocks

然后,你需要手动设置SOCKS代理实例您的HttpConnection,并通知它的将是使用代理后:

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)

请注意,上述进口python3.x



文章来源: Tunneling httplib Through a Proxy