2016-12-18 4 views
0

Я понимаю, что самый популярный способ получить ресурсы от http с помощью аутентификации - это использовать код ниже.urllib2 http-запрос с аутентификацией через прокси

import urllib2, base64 

request = urllib2.Request("http://api.foursquare.com/v1/user") 
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') 
request.add_header("Authorization", "Basic %s" % base64string) 
result = urllib2.urlopen(request) 

Мой вопрос в том, нужно ли мне настроить прокси-сервер, какой код следует добавить к вышеуказанному блоку кода? Я попробовал один ниже, но это не сработало. Сообщение об ошибке urllib2.URLError:

<urlopen error [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond> 

Вот код:

import urllib2 
import base64 


proxy_id = "ididid" 
proxy_pw = "password" 
proxyhandler = urllib2.ProxyHandler({"http":"http://"+proxy_id+":"+proxy_pw+"@proxy:8080"}) 
opener = urllib2.build_opener(proxyhandler) 
urllib2.install_opener(opener) 


request = urllib2.Request("http://api.foursquare.com/v1/user") 
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') 
request.add_header("Authorization", "Basic %s" % base64string) 
result = urllib2.urlopen(request) 

ответ

0

Если прокси-сервер требует использования пользователем/пройти аутентификацию, вы должны использовать ProxyBasicAuthHandler:

import urllib2 
import base64 


proxy_id = "ididid" 
proxy_pw = "password" 

proxy_handler = urllib2.ProxyHandler({'http': 'http://proxy:8080'}) 
proxy_auth_handler = urllib2.ProxyBasicAuthHandler() 
proxy_auth_handler.add_password('realm', 'host', proxy_id, proxy_pw) 

opener = urllib2.build_opener(proxy_handler, proxy_auth_handler) 
urllib2.install_opener(opener) 

request = urllib2.Request("http://api.foursquare.com/v1/user") 
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') 
request.add_header("Authorization", "Basic %s" % base64string) 
result = urllib2.urlopen(request) 
+0

Спасибо, сэр. Я забыл упомянуть, что мой прокси-блок хорошо работает для других веб-приложений. Мой блок запросов urllib2 работает хорошо, когда нет прокси. Но они не работают вместе, когда есть как прокси, так и HTTP-аутентификация ... Поэтому просто изменение кода для настройки прокси-сервера не помогло. В очередной раз благодарим за помощь! –

0

Извините за вопрос. Код был абсолютно правильным. Я использовал неправильный URL-адрес прокси-сервера, чтобы вызвать все проблемы.

Смежные вопросы