Python 2.7.4 (x64 win7) で Dropbox アカウントに接続しようとしていますが、こちらのガイドがとても役に立ちました。ただし、プロキシの背後にいて、このコードでは実行できない場合。(私がプロキシの背後にいない場合、コードは自宅からうまく機能します)
dropbox /rest.pyで使用されている urllib2 と httplib をいじろうとしましたが、うまくいきませんでした。接続コードを変更する必要があることはわかっていますが、ソケットに対してこれを行う方法がわかりません。
dropbox/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 でプロキシに接続でき、ドロップボックスが 433 で待機することはわかっています。だから私はこのコードを見つけました:
proxyHost = 'www.myProxy.adress.com'
proxyPort = 3128
conn = httplib.HTTPConnection(proxyHost, proxyPort)
conn.request("POST", "https://www.google.com")
これは機能しますが、これをソケット接続に適応させるスキルがありません。特に紛らわしいのは、接続にproxyAdressを与え、接続に最終アドレスを与えることができる通常の方法と比較して、ヘッダーまたはどこかにRequestを書き込まなければならないことです。
これは、 Python用のSOCKSについて読んで試したときでしたが、ソケットコードをプロキシを設定できる新しい「 sockocket 」に簡単に置き換えることができませんでした。
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 関数をプロキシで動作するように変更する方法を教えてください。