我正在尝试使用 python 2.7.4 (x64 win7) 连接到 Dropbox 帐户,他们的指南对我帮助很大。但是,当我在代理后面时,这段代码就不会这样做。(从家里代码效果很好,我不在代理后面)
我试图摆弄在dropbox/rest.py中使用的 urllib2 和 httplib,但没有运气。我知道我必须更改连接代码,但我不确定如何为套接字执行此操作。
保管箱/rest.py [行: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 上的代理,并且 dropbox 在 433 上等待。就此而言,我无法连接到任何https:// -adress。所以我找到了这段代码:
proxyHost = 'www.myProxy.adress.com'
proxyPort = 3128
conn = httplib.HTTPConnection(proxyHost, proxyPort)
conn.request("POST", "https://www.google.com")
哪个有效,但我缺乏适应套接字连接的技能。特别令人困惑的是,与通常的方式相比,我将 proxyAdress 提供给连接,并且必须将 Request 写入标头或某处,我可以将最终地址提供给连接。
这是当我阅读SOCKS for python 并尝试它们时,但我无法轻松地将套接字代码替换为可以设置代理的新“ 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 函数以使用代理。