Вопрос по http-status-code-401, google-app-engine, http-status-codes – Как проверить код состояния HTTP 401?

0

В одном из ответов, которые я получил здесьЯ столкнулся с проблемой не зная, как автоматически пройти через "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   ответа
1

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

Спасибо, Ник, за этот вклад. Я'Я найду некоторое время, чтобы просмотреть материалы, предоставленные Алексом, а затем вернусь с подробностями. brilliant
2

буду использовать нижний уровень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, иВот для более общего руководства о том, как работает базовая аутентификация (я полагаю, что понимание того, чтото, что происходит на нижнем уровне абстракции, поможет вам, даже если выВы используете верхний слой! -).

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

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

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

@ Brilliant: почему неВы перечислили вещи, которые вы пробовали, обновив свой вопрос? jldupont
Привет jldupont !!! Спасибо за ваш ответ. если я буду использовать способ, который вы предлагаете, я всегда получу номер 200 и этовсе, что я получаю. Пожалуйста, проверьте код выше, я только что добавил в основное поле этого вопроса. brilliant
Я попробовал, но снова столкнулся с ошибкой. Если у вас есть время и желание, пожалуйста, посмотрите там:stackoverflow.com/questions/1912845/... brilliant
@jldupont: Да, вы правы. Алекс указал мне и на эту ошибку. Это было решено здесь путем размещения обычных галочек:stackoverflow.com/questions/1912845/...  Но, как ни странно, идентификатор и пароль неПохоже, что он был передан на сайт! И я все еще получаю200", Пожалуйста, проверьте эту ссылку. brilliant

Похожие вопросы