Comment puis-je définir un proxy pour le dernier urllib
dans Python 3. Je fais le prochain
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()
J'ai essayé d'ajouter un proxy comme suit:
ask=urlrequest.Request.set_proxy(ask,proxies,'http')
Cependant, je ne sais pas à quel point c'est correct car j'obtiens la prochaine erreur:
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'
Vous devez appeler set_proxy()
sur une instance de la classe Request
, pas sur la classe elle-même:
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'))
J'avais besoin de désactiver le proxy dans notre environnement d'entreprise, car je voulais accéder à un serveur sur localhost. Je n'ai pas pu désactiver le serveur proxy avec l'approche de @mhawke (j'ai essayé de passer {}
, None
et []
comme proxy).
Cela a fonctionné pour moi (peut également être utilisé pour définir un proxy spécifique, voir le commentaire dans le code).
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 détectera automatiquement les proxys mis en place dans l'environnement - donc on peut simplement définir le HTTP_PROXY
variable soit dans votre environnement, par exemple pour Bash:
export HTTP_PROXY=http://proxy_url:proxy_port
ou en utilisant Python par ex.
import os
os.environ['HTTP_PROXY'] = 'http://proxy_url:proxy_port'
J'utilise normalement le code suivant pour les demandes de proxy:
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'])