0

Windows XP、Python 2.5および2.6で、次のコードをテストしました。

import urllib2
proxy= urllib2.ProxyHandler({'http': '127.0.0.1:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')

上記のコードでは、httplib.pyの349行目からBadStatusLine例外が発生します。

私は127.0.0.1:8080で動作するプロキシを持っています(proxyswitchyで使用するようにブラウザを設定でき、オンの場合はオフのときにブロックされているサイトにアクセスできます[中国])。

ソックスプロキシに変更すると、

proxy= urllib2.ProxyHandler({'socks': '127.0.0.1:8080'})

その場合、プロキシはまったく使用されません。

Proxyの質問からurllib2を使用してコードを取得しましたが、ほぼ同じです。何が問題になっている可能性がありますか?

更新:urllib2はsocksプロキシをサポートしていません。

最終的にはcurlで動作するようになりました:

c = pycurl.Curl()

#stupid GFW
if settings.CHINA:
    c.setopt(pycurl.PROXY, '127.0.0.1')
    c.setopt(pycurl.PROXYPORT, 8087)
    c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
4

3 に答える 3

2

urllib2 ProxyHandler は、SOCKS プロトコルをサポートするようには設計されていません。おそらく、この答えが役立つでしょう。

于 2010-09-16T11:31:49.753 に答える
0

ローカル プロキシがソックス プロキシではなく HTTP プロキシであると仮定します。これを試して:

import urllib2
proxy= urllib2.ProxyHandler({'http': 'http://127.0.0.1:8080/'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com/')
于 2010-09-16T11:40:58.237 に答える
0

更新: 私は中国の巨大なファイアウォールの背後にいます。これが問題を複雑にしていました。gfw は、接続を切断し、DNS ポイズニングを実行していました。

urllib2 ソリューションを機能させることができませんでした。しかし、pycurl は機能しているようで、「接続のリセット」の問題を回避します。ただし、fb/twitter はまだブロックされています。

彼らの IPS をホスト ファイルに追加するとうまくいきます。そのため、大規模なソリューションの場合は、DNS プロキシを設定する必要があります。

于 2010-09-17T04:28:05.430 に答える