如何检查HTTP状态代码为401?

时间:2009-12-14 15:51:08

标签: google-app-engine http-status-codes http-status-code-401

In one of the answers that I have received here,我遇到了一个问题,即我不知道如何通过“Google App Engines”将我的ID和密码自动传递到我注册的用户并拥有帐户的网站。我建议“检查HTTP状态代码为401,”需要授权“,并提供网站要求的HTTP授权类型(基本,摘要等)”。我不知道如何检查状态代码。任何人,请告诉我该怎么做?

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

其他信息:

如果我在Google App Engine中使用这种方式(获取我的易趣摘要页面的网址):

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”

4 个答案:

答案 0 :(得分:2)

在普通的Python代码中,我可能会使用较低级别的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,它会返回response object属性为status_code的{​​{3}}。如果该属性为401,则表示您需要在标题中重复提取 相应类型的授权信息。

但是,App Engine现在也支持urllib2,因此如果您对使用这种更高级别的抽象感到满意,可以将工作委托给它。有关如何将基本身份验证委派给urllib2的教程,请参阅here;有关基本身份验证的工作方式的更一般性教程,请参阅here(我相信了解抽象底层的内容可以帮助您即使你正在使用更高层! - )。

答案 1 :(得分:1)

除非我不完全理解您的问题,否则您可以使用status_code属性从Response Object获取返回代码。

首先,您必须向要测试的网址发出fetch()

答案 2 :(得分:1)

大多数面向用户的网站不使用HTTP身份验证,而是使用基于cookie的身份验证,并使用HTML表单进行登录。如果要在自己的代码中复制此内容,则需要对相关应用程序的登录URL发出HTTP POST请求,并捕获已发回的cookie,包括您将来要求自己进行身份验证的所有请求。如果没有关于您尝试进行身份验证的特定站点的更多详细信息,则很难更具体。

答案 3 :(得分:1)

你没有得到401,因为该网站不会返回401但总是200。通常我们为网站做的编码类型是返回200,页面上写着“请登录......哇哇哇”,如果网站返回任何其他内容,那么200浏览器将不会显示时髦的错误信息。

所以简言之,正如我在其他问题中所提到的,你需要查看登录页面,看看它使用了什么参数,例如login = xxx,password = yyy,将其发布到该页面,你也必须管理cookie,这就像斜纹等图书馆一样。

相关问题