web-dev-qa-db-ja.com

HTTPプロキシの使用-Python

HTTP_RPOXY環境変数をプロキシアドレスに設定する必要があるという事実に精通しています。

通常、urllibは正常に機能しますが、問題はurllib2を処理することです。

>>> urllib2.urlopen("http://www.google.com").read()

返却値

urllib2.URLError: <urlopen error [Errno 10061] No connection could be made because the target machine actively refused it>

または

urllib2.URLError: <urlopen error [Errno 11004] getaddrinfo failed>

追加情報:

urllib.urlopen(....)は正常に動作します!トリックをしているのはurllib2だけです...

私は@Feniksoの回答を試しましたが、今このエラーが発生しています:

URLError: <urlopen error [Errno 10060] A connection attempt failed because the 
connected party did not properly respond after a period of time, or established
connection failed because connected Host has failed to respond>      

何か案は?

45
RadiantHex

HTTP_PROXY環境変数がなくても実行できます。このサンプルを試してください:

import urllib2

proxy_support = urllib2.ProxyHandler({"http":"http://61.233.25.166:80"})
opener = urllib2.build_opener(proxy_support)
urllib2.install_opener(opener)

html = urllib2.urlopen("http://www.google.com").read()
print html

あなたの場合、プロキシサーバーが接続を拒否しているようです。


試してみてください:

import urllib2

#proxy = "61.233.25.166:80"
proxy = "YOUR_PROXY_GOES_HERE"

proxies = {"http":"http://%s" % proxy}
url = "http://www.google.com/search?q=test"
headers={'User-agent' : 'Mozilla/5.0'}

proxy_support = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1))
urllib2.install_opener(opener)

req = urllib2.Request(url, None, headers)
html = urllib2.urlopen(req).read()
print html

2014年編集:これはよくある質問/回答のようです。しかし、今日は代わりにサードパーティの requests モジュールを使用します。

1つのリクエストに対して次を実行します。

import requests

r = requests.get("http://www.google.com", 
                 proxies={"http": "http://61.233.25.166:80"})
print(r.text)

複数のリクエストにはSessionオブジェクトを使用するため、すべてのリクエストにproxiesパラメータを追加する必要はありません。

import requests

s = requests.Session()
s.proxies = {"http": "http://61.233.25.166:80"}

r = s.get("http://www.google.com")
print(r.text)
61
Fenikso

リクエストモジュールを使用することをお勧めします。

組み込みのhttpクライアントよりもはるかに簡単です。 http://docs.python-requests.org/en/latest/index.html

サンプル使用法:

r = requests.get('http://www.thepage.com', proxies={"http":"http://myproxy:3129"})
thedata = r.content
16
abeusher

言及したかったのは、https_proxy https URLにアクセスする必要がある場合のOS環境変数。私の場合、それは私には明らかではなかったので、これを発見するために何時間も試みました。

私のユースケース:Win 7、jython-standalone-2.5.3.jar、ez_setup.pyを介したsetuptoolsのインストール

6

Python 3:

import urllib.request

htmlsource = urllib.request.FancyURLopener({"http":"http://127.0.0.1:8080"}).open(url).read().decode("utf-8")
3
user136036

Jythonクライアントでこれに遭遇しました。
サーバーは、TLSコンテキストjavax.net.ssl.SSLContext.getInstance( "SSL")を使用して、TLSとクライアントのみを通信していました

クライアントがTLSを使用すると、作業が開始されました。

0