Pergunta

O urllib2 em Python 2.6.1 suporte a proxy via https?

Eu encontrei o seguinte em http://www.voidspace.org .uk / python / artigos / urllib2.shtml :

NOTA

Atualmente urllib2 não suporta busca de https locais através de um proxy. Isso pode ser um problema.

Eu estou tentando de login automatizar no site e fazer o download de documentos, tenho válido nome de usuário / senha.

proxy_info = {
    'host':"axxx", # commented out the real data
    'port':"1234"  # commented out the real data
}

proxy_handler = urllib2.ProxyHandler(
                 {"http" : "http://%(host)s:%(port)s" % proxy_info})
opener = urllib2.build_opener(proxy_handler,
         urllib2.HTTPHandler(debuglevel=1),urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)

fullurl = 'https://correct.url.to.login.page.com/user=a&pswd=b' # example
req1 = urllib2.Request(url=fullurl, headers=headers)
response = urllib2.urlopen(req1)

Eu tive que trabalhar para páginas semelhantes, mas não usando HTTPS e eu suspeito que não recebe através de proxy - ele só fica preso da mesma maneira como quando eu não especificou proxy. Eu preciso ir para fora através de proxy.

Eu preciso autenticar mas não usando autenticação básica, vai urllib2 descobrir autenticação quando indo via https local (I fornecer nome de usuário / senha para o site via url)?

EDIT: Não, eu testei com

   proxies = {
        "http" : "http://%(host)s:%(port)s" % proxy_info,
        "https" : "https://%(host)s:%(port)s" % proxy_info
    }

    proxy_handler = urllib2.ProxyHandler(proxies)

E eu fico de erro:

urllib2.URLError: erro urlopen [Errno 8] _ssl.c: 480: EOF ocorreu em violação do protocolo

Foi útil?

Solução

Eu não tenho certeza o artigo de Michael Foord, que você cita, é atualizado para Python 2.6.1 - por que não dar uma chance? Em vez de dizer ProxyHandler que o proxy só é bom para http, como você está fazendo agora, registrá-lo para https, também (é claro que você deve formatá-lo em uma variável apenas uma vez antes de chamar ProxyHandler e apenas repetidamente usar essa variável na dict): que podem ou não podem trabalhar, mas, você não está mesmo tentando , e que de certeza não trabalho -)

Outras dicas

Fixed em Python 2.6.3 e vários outros ramos:

  • _bugs.python.org/issue1424152 (substitua _ com http ...)
  • http://www.python.org/download /releases/2.6.3/NEWS.txt

    Edição # 1424152: Correção para httplib, urllib2 para SSL apoio ao trabalhar com proxy. patch original por Christopher Li, as alterações feitas por Senthil Kumaran.

Incase qualquer outra pessoa tem esse problema no futuro eu gostaria de salientar que ele faz suporte https proxy agora, certifique-se os suportes de proxy-lo também ou você corre o risco de correr em um bug que coloca a biblioteca Python em um loop infinito (isso aconteceu comigo).

Veja a unittest na fonte python que está testando https proxy suporte para mais informações: http: //svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top