through script python http proxy

script - ¿Cómo especificar un proxy autenticado para una conexión http python?



proxy python script (6)

Aquí está el método use urllib

import urllib.request # set up authentication info authinfo = urllib.request.HTTPBasicAuthHandler() proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) # build a new opener that adds authentication and caching FTP handlers opener = urllib.request.build_opener(proxy_support, authinfo, urllib.request.CacheFTPHandler) # install it urllib.request.install_opener(opener) f = urllib.request.urlopen(''http://www.python.org/'') """

¿Cuál es la mejor manera de especificar un proxy con nombre de usuario y contraseña para una conexión http en python?


Establecer un entorno var denominado http_proxy como este: http: // nombre de usuario: contraseña @ proxy_url: puerto


Esto funciona para mí:

import urllib2 proxy = urllib2.ProxyHandler({''http'': ''http:// username:password@proxyurl:proxyport''}) auth = urllib2.HTTPBasicAuthHandler() opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler) urllib2.install_opener(opener) conn = urllib2.urlopen(''http://python.org'') return_str = conn.read()


La mejor forma de pasar por un proxy que requiere autenticación es usar urllib2 para crear un abridor de URL personalizado, y luego usarlo para realizar todas las solicitudes que desee realizar a través del proxy. Tenga en cuenta, en particular, que probablemente no desee insertar la contraseña del proxy en la url o en el código fuente de Python (a menos que sea un truco rápido).

import urllib2 def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"): password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() password_mgr.add_password(None, proxyurl, proxyuser, proxypass) proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl}) proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr) return urllib2.build_opener(proxy_handler, proxy_auth_handler) if __name__ == "__main__": import sys if len(sys.argv) > 4: url_opener = get_proxy_opener(*sys.argv[1:4]) for url in sys.argv[4:]: print url_opener.open(url).headers else: print "Usage:", sys.argv[0], "proxy user pass fetchurls..."

En un programa más complejo, puede separar estos componentes según corresponda (por ejemplo, solo usando un administrador de contraseñas durante el tiempo de vida de la aplicación). La documentación de python tiene más ejemplos sobre cómo hacer cosas complejas con urllib2 que también puede resultarle útil.


O si desea instalarlo, para que siempre se use con urllib2.urlopen (por lo que no necesita mantener una referencia al abridor):

import urllib2 url = ''www.proxyurl.com'' username = ''user'' password = ''pass'' password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() # None, with the "WithDefaultRealm" password manager means # that the user/pass will be used for any realm (where # there isn''t a more specific match). password_mgr.add_password(None, url, username, password) auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr) opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener) print urllib2.urlopen("http://www.example.com/folder/page.html").read()


Utilizar esta:

import requests proxies = {"http":"http://username:password@proxy_ip:proxy_port"} r = requests.get("http://www.example.com/", proxies=proxies) print(r.content)

Creo que es mucho más simple que usar urllib . No entiendo por qué a las personas les encanta usar urllib tanto.