【发布时间】:2023-03-16 04:51:01
【问题描述】:
我正在尝试使用 python 2.7.4 (x64 win7) 连接到 Dropbox 帐户,他们的指南 here 帮助了我很多。但是,当我在代理后面时,这段代码就不会这样做。 (在家里,代码工作得很好,我不在代理后面)
我试图摆弄 dropbox/rest.py 中使用的 urllib2 和 httplib,但没有运气。我知道我必须更改连接代码,但我不确定如何为 Socket 执行此操作。
dropbox/rest.py [line:99]
def create_connection(address):
host, port = address
err = None
for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
sock = None
try:
sock = socket.socket(af, socktype, proto)
sock.connect(sa)
return sock
except socket.error, _:
err = _
if sock is not None:
sock.close()
if err is not None:
raise err
else:
raise socket.error("getaddrinfo returns an empty list")
我总是收到错误:[Errno 10060] SocketError。 我不太了解网络和端口,但我知道我可以连接到端口 3128 上的代理,并且保管箱在 433 上等待。就此而言,我无法连接到任何 https:// -地址。所以我找到了这段代码:
proxyHost = 'www.myProxy.adress.com'
proxyPort = 3128
conn = httplib.HTTPConnection(proxyHost, proxyPort)
conn.request("POST", "https://www.google.com")
这可行,但我缺乏将其适应套接字连接的技能。特别令人困惑的是,与通常的方式相比,我将 proxyAdress 提供给连接并且必须将 Request 写入标头或某处,我可以将最终地址提供给连接。
这是当我阅读有关 python 的 SOCKS 并尝试它们时,但我无法轻松地将套接字代码替换为可以设置代理的新“socksocket”:
import socks
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5,"www.myProxy.adress.com")
socket.socket = socks.socksocket
urllib.urlopen("https://www.google.com/")
非常感谢任何帮助,如何更改 rest.py 的 create_connection 函数以使用代理。
【问题讨论】:
标签: python https proxy dropbox socks