0

在我在这里收到的一个答案中,我遇到了一个问题,即不知道如何通过“Google App Engines”自动将我的 ID 和密码传递到我是注册用户并拥有帐户的网站。有人建议我“检查 HTTP 状态代码 401,“需要授权”,并提供网站要求的那种 HTTP 授权(基本、摘要等)”。我不知道如何检查状态码。谁能告诉我怎么做?

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

附加信息:

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

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

4 回答 4

3

在普通的 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,它返回一个带有属性的响应对象。status_code如果该属性是 401,则意味着您需要在标头中使用适当类型的授权信息重复获取。

但是,App Engine 现在也支持 urllib2,因此如果您对使用这种更高级别的抽象感到满意,您可以将工作委托给它。有关如何将基本身份验证委托给 urllib2 的教程,请参阅此处,以及有关基本身份验证如何工作更一般的教程(我相信即使您使用更高的抽象层,了解较低抽象层发生的事情也会对您有所帮助层!-)。

于 2009-12-14T16:24:17.837 回答
1

除非我不完全理解您的问题,否则您可以使用该属性从响应对象中获取返回码。status_code

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

于 2009-12-14T15:54:58.957 回答
1

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

于 2009-12-14T23:14:42.263 回答
1

您没有收到 401,因为该站点始终没有返回 401,而是返回 200。通常我们为网站做的编码类型是返回 200 并带有一个页面说“请登录..blah blah”,如果网站返回任何其他内容然后 200 浏览器将不会显示时髦的错误消息。

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

于 2009-12-15T04:46:38.237 回答