Как проверить код состояния HTTP 401?

В одном из ответов, которые я получил здесьЯ столкнулся с проблемой не зная, как автоматически пройти через "Google App Engines " мой идентификатор и пароль к веб-сайту, на котором я являюсь зарегистрированным пользователем и имею учетную запись. Предложение было дано мне "проверьте код состояния HTTP 401 "Требуется Авторизация"и предоставьте вид HTTP-авторизации (базовый, дайджест и т. д.), который запрашивает сайт ", Я нене знаю, как проверить код состояния. Может кто-нибудь, пожалуйста, подскажите, как это сделать?

+++++++++++++++++++++++++++++++++

Дополнительная информация:

Если я использую этот способ в Google App Engine (выбирая URL-адрес моей сводной страницы eBay):

from google.appengine.api import urlfetch
url = "http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&gbh=1&CurrentPage=MyeBaySummary&ssPageName=STRK:ME:LNLK"
result = urlfetch.fetch(url)
if result.status_code == 200:
   print "content-type: text/plain"
   print
   print result.status_code

Я всегда получаю200" вместо "401"

Ответы на вопрос(3)

тентификацию HTTP, предпочитая вместо этого использовать аутентификацию на основе файлов cookie с HTML-формами для входа. Если вы хотите продублировать это в своем собственном коде, вам нужно сделать HTTP-запрос POST к URL-адресу входа в систему для рассматриваемого приложения и захватить файл cookie, который 'отправлены обратно, в том числе и во все ваши будущие запросы на аутентификацию. Без более подробной информации о конкретном сайте выпытаемся подтвердить подлинность противТрудно быть более конкретным.

 brilliant15 дек. 2009 г., 19:47
Спасибо, Ник, за этот вклад. Я'Я найду некоторое время, чтобы просмотреть материалы, предоставленные Алексом, а затем вернусь с подробностями.

Объект ответа с использованиемstatus_code имущество.

Ты первый'придется выпуститьвыборки () на URL, который вы хотите проверить.

 brilliant15 дек. 2009 г., 19:34
Спасибо, jldupont! Я'Я найду время, чтобы исследовать это.
 jldupont17 дек. 2009 г., 14:43
@ Brilliant: почему неВы перечислили вещи, которые вы пробовали, обновив свой вопрос?
 brilliant16 дек. 2009 г., 08:08
Я попробовал, но снова столкнулся с ошибкой. Если у вас есть время и желание, пожалуйста, посмотрите там:stackoverflow.com/questions/1912845/...
 brilliant16 дек. 2009 г., 19:33
@jldupont: Да, вы правы. Алекс указал мне и на эту ошибку. Это было решено здесь путем размещения обычных галочек:stackoverflow.com/questions/1912845/...  Но, как ни странно, идентификатор и пароль неПохоже, что он был передан на сайт! И я все еще получаю200", Пожалуйста, проверьте эту ссылку.
 jldupont15 дек. 2009 г., 19:50
@ Brilliant: мое удовольствие.
 brilliant17 дек. 2009 г., 12:53
@jldupont: "... возможно, вам придется копать глубже в ответе / заголовках, которые вы получите ... " - Не могли бы вы дать мне понять, как я могу это сделать?
 brilliant14 дек. 2009 г., 17:35
Привет jldupont !!! Спасибо за ваш ответ. если я буду использовать способ, который вы предлагаете, я всегда получу номер 200 и этовсе, что я получаю. Пожалуйста, проверьте код выше, я только что добавил в основное поле этого вопроса.
 jldupont16 дек. 2009 г., 14:44
@brilliant: обратная связь о синтаксической ошибке. Может ли это быть связано с тем, что вы используете обратную галочку "вместо обычной галочки"? или же " ?
 jldupont14 дек. 2009 г., 17:39
хммм ... вы имеете в виду аутентифицированный запрос? Вам необходимо предоставить информацию в заголовке запроса.fetch() Функция позволяет устанавливать поля заголовка.
 jldupont16 дек. 2009 г., 19:59
@brilliant: вам нужно знать, что запросы проходят через прокси-сервер: вам, возможно, придется копать глубже в ответе / заголовках, которые вы получите, чтобы устранить неполадки.
 brilliant17 дек. 2009 г., 20:31
@jldupont: "почему Дон'Вы перечислили вещи, которые вы пробовали, обновив свой вопрос? " - Потому что я думал, что это слишком сильно раздувает страницу с вопросом и приведет к тому, что она потеряет свою характеристику, будучи страницей, которая занимается только одним конкретным вопросом. Кроме того, учитывая тот факт, что вещи, которые я пробую, немного отличаются, я подумал, что было бы лучше разместить их на разных страницах вопросов под разными заголовками, чтобы будущим пользователям было легче ориентироваться на них и, следовательно, находить их.
Решение Вопроса

буду использовать нижний уровеньHTTPLIBНапример:

import httplib

domains = 'google.com gmail.com appspot.com'.split()

for domain in domains:
  conn = httplib.HTTPConnection(domain)
  conn.request('GET', '/')
  resp = conn.getresponse()
  print 'Code %r from %r' % (resp.status, domain)

это покажет вам такие коды, как 301 (перемещено навсегда) и 302 (перемещено временно); библиотеки более высокого уровня, такие какurllib2 справится с такими вещамиза кулисами" для вас, что удобно, но затрудняет простое управлениепридется устанавливать самостоятельно "url opener " объекты и т. д.).

В App Engine вывероятно, лучше использоватьUrlFetch, который возвращаетобъект ответа сstatus_code приписывать. Если этот атрибут 401, это означает, что вам нужно повторить выборкус соответствующий вид авторизации информации в заголовках.

Тем не менее, App Engine теперь также поддерживает urllib2, так что если вывы можете использовать этот более высокий уровень абстракции, вы можете делегировать работу ему. УвидетьВот учебник о том, как делегировать базовую аутентификацию в urllib2, иВот для более общего руководства о том, как работает базовая аутентификация (я полагаю, что понимание того, чтото, что происходит на нижнем уровне абстракции, поможет вам, даже если выВы используете верхний слой! -).

 brilliant16 дек. 2009 г., 08:06
Привет, Алекс!!! Я только что задал еще один вопрос по использованию вашего кода здесь:stackoverflow.com/questions/1912845/...  Так что, если у вас есть время и желание, пожалуйста, посмотрите.
 brilliant14 дек. 2009 г., 17:38
Алекс, спасибо за ответ снова. (1)... Если этот атрибут 401, значит, вам нужно повторить ... » - Я получил "200" все время (пожалуйста, проверьте код выше, я только что добавил в основное поле этого вопроса); (2) Спасибо за ссылки. Я изучаю их в данный момент;
 brilliant15 дек. 2009 г., 19:33
Спасибо, Алекс, за эту ссылку. Я'Я найду время, чтобы исследовать это.
 Alex Martelli14 дек. 2009 г., 19:56
@ Brilliant, тыполучаю 200 'именно потому, что urllib2 что-то делает "за кулисами" от вашего имени; тот'Это удобно, но усложняет понимание и контроль. Для простой базовой аутентификации с помощью urlfetch (надеюсь, вы ненужен более продвинутый дайджест, см.chillorb.com/?p=195 (включая симплекс 's комментарий, это необходимо, чтобы заставить вещи работать ;-).
 brilliant14 дек. 2009 г., 18:21
Алекс, я только что попытался прочитать те две ссылки, которые ты здесь предоставил, и этоЭто слишком сложно для меня. Я думаю, что я буду придерживаться пути AppEngine-urlfetch.

Ваш ответ на вопрос