web-dev-qa-db-ja.com

プロキシをurllib.requestに設定する(Python3)

Python 3.の最後のurllibにプロキシを設定するにはどうすればよいですか。3.次を実行しています。

from urllib import request as urlrequest
ask = urlrequest.Request(url)     # note that here Request has R not r as prev versions
open = urlrequest.urlopen(req)
open.read()

次のようにプロキシを追加してみました:

ask=urlrequest.Request.set_proxy(ask,proxies,'http')

しかし、私は次のエラーを受け取っているので、それがどれほど正しいかわかりません:

336     def set_proxy(self, Host, type):
--> 337         if self.type == 'https' and not self._tunnel_Host:
    338             self._tunnel_Host = self.Host
    339         else:

AttributeError: 'NoneType' object has no attribute 'type'
8
gm1

クラス自体ではなく、クラスRequestの-​​instanceset_proxy()を呼び出す必要があります。

from urllib import request as urlrequest

proxy_Host = 'localhost:1234'    # Host and port of your proxy
url = 'http://www.httpbin.org/ip'

req = urlrequest.Request(url)
req.set_proxy(proxy_Host, 'http')

response = urlrequest.urlopen(req)
print(response.read().decode('utf8'))
13
mhawke

ローカルホストのサーバーにアクセスしたかったので、会社の環境ではプロキシを無効にするにする必要がありました。 @mhawkeからのアプローチではプロキシサーバーを無効にできませんでした({}Noneおよび[]をプロキシとして渡そうとしました)。

これは私にとってはうまくいきました(特定のプロキシの設定にも使用できます。コード内のコメントを参照してください)。

import urllib.request as request

# disable proxy by passing an empty
proxy_handler = request.ProxyHandler({})
# alertnatively you could set a proxy for http with
# proxy_handler = request.ProxyHandler({'http': 'http://www.example.com:3128/'})

opener = request.build_opener(proxy_handler)

url = 'http://www.example.org'

# open the website with the opener
req = opener.open(url)
data = req.read().decode('utf8')
print(data)

rllibはプロキシを自動的に検出します 環境に設定されているため、HTTP_PROXYいずれかの環境の変数。 Bashの場合:

export HTTP_PROXY=http://proxy_url:proxy_port

またはPythonを使用します。例:.

import os
os.environ['HTTP_PROXY'] = 'http://proxy_url:proxy_port'
0
Pierz

私は通常、プロキシリクエストに次のコードを使用します。

import requests
proxies = {
    'http': 'http://proxy.server:port',
    'https': 'http://proxyserver:port',
}
s = requests.Session()
s.proxies = proxies
r = s.get('https://api.ipify.org?format=json').json()
print(r['ip'])
0
Pedro Lobito