19

プロキシを介してサーバーにデータを送信する方法を理解しようとしています。私はこれがtorを通じて可能になることを望んでいましたが、torはSOCKSを使用しているため、httplibでは不可能なようです(間違っている場合は修正してください)

これは私が今持っているものです

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

問題は、トンネルが設定されるとフリーズするように見えることです。ご協力いただきありがとうございます。

4

3 に答える 3

18

httpプロキシを使用する場合は、次のようになります。

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

SOCKSプロキシを使用する場合は、次の質問のようにSocksiPyを使用できます。urllib2でSOCKS 4/5プロキシを使用するにはどうすればよいですか?

于 2012-08-04T06:24:44.197 に答える
6

正解は次のようになります。

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

import httplib
con = httplib.HTTPConnection(proxyHost, proxyPort)
con.set_tunnel("www.google.com", 80)
con.send("Sent Stuff")
于 2013-11-26T01:26:36.237 に答える
2

Khue Vuの回答のフォローアップとして、完全な例を示します。これをSOCKSプロキシで機能させる方法の詳細は、予想よりも複雑でした。

まず、次のコマンドを使用してPySocksをインストールします。

pip install PySocks

次に、HTTPConnectionをインスタンス化し、プロキシを使用することを通知した後、SOCKSプロキシを手動で設定する必要があります。

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であることに注意してください

于 2017-07-03T21:30:56.833 に答える