簡體   English   中英

將代理設置為 urllib.request (Python3)

[英]Setting proxy to urllib.request (Python3)

我如何為Python中的最后一個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'

您應該在類Request實例上調用set_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'))

我需要在我們公司的環境中禁用代理,因為我想訪問本地主機上的服務器。 我無法使用@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)

Urllib 將自動檢測在環境中設置的代理- 因此您可以在您的環境中設置HTTP_PROXY變量,例如用於 Bash:

export HTTP_PROXY=http://proxy_url:proxy_port

或使用 Python 例如

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

來自 urllib 文檔的注意事項:“如果設置了變量REQUEST_METHODHTTP_PROXY [環境變量] 將被忽略;請參閱有關getproxies () 的文檔”

我通常將以下代碼用於代理請求:

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'])
import urllib.request
def set_http_proxy(proxy):
    if proxy == None: # Use system default setting
        proxy_support = urllib.request.ProxyHandler()
    elif proxy == '': # Don't use any proxy
        proxy_support = urllib.request.ProxyHandler({})
    else: # Use proxy
        proxy_support = urllib.request.ProxyHandler({'http': '%s' % proxy, 'https': '%s' % proxy})
    opener = urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)

proxy = 'user:pass@ip:port'
set_http_proxy(proxy)

url  = 'https://www.httpbin.org/ip'
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
html = response.read()
html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM