Como especificar um proxy autenticado para uma conexão http python?

votos
46

Qual é a melhor maneira de especificar um proxy com nome de usuário e senha para uma conexão http em python?

Publicado 29/08/2008 em 07:55
fonte usuário
Em outras línguas...                            


6 respostas

votos
57

Isso funciona para mim:

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()
Respondeu 29/08/2008 em 08:30
fonte usuário

votos
15

Definir um var ambiente denominada http_proxy como este: http: // username: password @ proxy_url: port

Respondeu 15/10/2010 em 15:06
fonte usuário

votos
9

A melhor maneira de passar por um proxy que requer autenticação está usando urllib2 para construir um abridor de URL personalizado, em seguida, usando isso para fazer todas as solicitações que você deseja passar pelo proxy. Note em particular, você provavelmente não deseja incorporar a senha proxy no URL ou o código-fonte python (a menos que seja apenas um truque 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..."

Em um programa mais complexo, você pode separar estes componentes, quando necessário (por exemplo, usando apenas um gerente de senha para a vida útil do aplicativo). A documentação python tem mais exemplos sobre como fazer as coisas complexas com urllib2 que também podem ser úteis.

Respondeu 29/08/2008 em 23:52
fonte usuário

votos
3

Usa isto:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)

Eu acho que é muito mais simples de usar urllib. Eu não entendo por que as pessoas adoram usar urllibtanto.

Respondeu 29/01/2017 em 11:19
fonte usuário

votos
3

Ou se você deseja instalá-lo, para que ele seja sempre usado com urllib2.urlopen (assim você não precisa manter uma referência para o abridor de volta):

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()
Respondeu 26/09/2008 em 23:17
fonte usuário

votos
1

Aqui está o uso do método 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/')
"""
Respondeu 25/03/2016 em 08:37
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more