Я попытался использовать следующий код, чтобы получить содержимое на url:
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
response = urllib2.urlopen(request,timeout=20)
Я получил ошибку:
urllib2.URLError: <urlopen error [Errno 10054] An existing connection was forcibly closed by the remote host>
Но я могу получить доступ к url, используя те же учетные данные через браузер.
Вы получаете эту ошибку, если сначала не пытаетесь открыть соединение с браузером? Соединение вашего браузера может быть существующим соединением, упомянутым в сообщении об ошибке.
когда вы говорите «используя те же учетные данные в браузере», вы имеете в виду, что браузер фактически использовал базовую аутентификацию HTTP или вы вводили это имя пользователя/пароль в веб-форму?
@SamMason, используя имя пользователя/пароль в веб-форме.
это сильно отличается от использования базовой аутентификации, веб-сайт должен быть явно запрограммирован для поддержки обоих (или использовать структуру, которая делает это автоматически). вам, вероятно, потребуется использовать инструменты разработчика, встроенные в ваш браузер, чтобы увидеть, что происходит во время входа в систему, например. куда отправляются учетные данные, любые средства защиты XSRF и т. д., а затем реплицируйте это в коде. обратите внимание, что это противоречит условиям многих сайтов, и вам следует проконсультироваться с их администратором.






Я решил проблему. Потому что через веб-браузер я фактически использую прокси-сервер, но не использовал его в скрипте Python. Позже я включаю прокси перед выполнением HTTP-запроса, и он работает.
Вам нужно будет получить Telerik Fiddler и проанализировать трафик, чтобы увидеть, какие условия необходимо выполнить, чтобы сделать ваш запрос приемлемым для веб-сайта.