urllib2を使用したプロキシ
URLを開きます:
site = urllib2.urlopen('http://google.com')
そして、私がしたいことは、私にどこかで教えてくれたプロキシと同じ方法で接続することです:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
しかし、それもうまくいきませんでした。
Urllib2にはプロキシハンドラのようなものがあることは知っていますが、その関数を思い出すことはできません。
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
ProxyHandlerをインストールする必要があります
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1'})
)
)
urllib2.urlopen('http://www.google.com')
環境変数を使用してプロキシを設定できます。
import os
os.environ['http_proxy'] = '127.0.0.1'
os.environ['https_proxy'] = '127.0.0.1'
urllib2
は、この方法でプロキシハンドラを自動的に追加します。異なるプロトコルのプロキシを個別に設定する必要があります。そうしないと、プロキシを通過しないという点で失敗します。以下を参照してください。
例えば:
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
# next line will fail (will not go through the proxy) (https)
urllib2.urlopen('https://www.google.com')
代わりに
proxy = urllib2.ProxyHandler({
'http': '127.0.0.1',
'https': '127.0.0.1'
})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
# this way both http and https requests go through the proxy
urllib2.urlopen('http://www.google.com')
urllib2.urlopen('https://www.google.com')
デフォルトのシステムプロキシ(たとえば、http_support環境変数から)を使用するには、現在の要求に対して(urllib2にグローバルにインストールすることなく)次のように機能します。
url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
受け入れられた答えに加えて:私のsciptは私にエラーを与えました
File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
if '@' in Host:
TypeError: iterable argument required
解決策は、プロキシ文字列の前にhttp://を追加することでした:
proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
プロキシを使用してWebページにアクセスする場合は、リクエストを使用することもできます。 Python 3コード:
>>> import requests
>>> url = 'http://www.google.com'
>>> proxy = '169.50.87.252:80'
>>> requests.get(url, proxies={"http":proxy})
<Response [200]>
複数のプロキシを追加することもできます。
>>> proxy1 = '169.50.87.252:80'
>>> proxy2 = '89.34.97.132:8080'
>>> requests.get(url, proxies={"http":proxy1,"http":proxy2})
<Response [200]>
さらに、コマンドラインセッションのプロキシを設定します。スクリプトを実行するコマンドラインを開きます。
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
その端末でスクリプトを実行します。