【问题标题】:How can you connect through a SOCKS proxy with python httplib / http.client? [duplicate]如何通过 SOCKS 代理与 python httplib / http.client 连接? [复制]
【发布时间】:2017-07-03 21:11:53
【问题描述】:

通常,当使用 httplib (python 2.x) 或 http.client (python 3.x) 时,您会像这样建立连接并发出请求:

from http.client import HTTPConnection
from urllib.parse import urlparse, urlencode

url = urlparse("http://final.destination.example.com:8888/")
conn = HTTPConnection(url.netloc)
request_path = "%s?%s" % (url.path, url.query)
conn.request("POST", request_path, post_data)

(请注意,此示例代码具有 python 3.x 导入)

出于性能原因,我想使用 http.client,但我也想使用 SOCKS 代理远程访问集群。

有没有办法通过 httplib/http.client 使用 SOCKS 代理?

【问题讨论】:

  • 我认为它可能是重复的,谢谢@ImanMirzadeh 我将在下面交叉发布答案,以便该问题有一个完整的答案(回复停止工作代码)

标签: python proxy socks httplib http.client


【解决方案1】:

我在这里回答我自己的问题,希望遇到这种情况的下一个人可以找到解决方案。

首先安装 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多