0

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

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

附加信息:

如果我使用谷歌应用程序引擎这种方式(获取我的易趣摘要页面的网址):

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”

回答

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属性。如果该属性为401,则意味着您需要重复提取头中适当类型的授权信息。

但是,App Engine现在也支持urllib2,所以如果您对使用这种更高级别的抽象层感到舒服,则可以将工作委托给它。请参阅here以获取有关如何将基本身份验证委派给urllib2和教育here的教程,以获取有关基本身份验证如何工作的更一般教程(我相信,即使您使用更高级别的抽象层,了解底层抽象层中发生的情况也可以帮助您层!-)。

+0

亚历克斯,谢谢你再次回答。 (1)“...如果这个属性是401,这意味着你需要重复...” - 我总是得到“200”(请检查上面的代码,我刚刚添加到这个问题的主要领域) ; (2)感谢您的链接。我正在研究他们; – brilliant 2009-12-14 16:38:36

+0

亚历克斯,我只是想通读你在这里提供的那两个链接,这对我来说太过分了。我想我会坚持AppEngine-urlfetch的方式。 – brilliant 2009-12-14 17:21:46

+1

@brilliant,你会得到200的,因为urllib2代表你在“幕后”做事;这很方便,但让理解和控制有点难度。对于简单的基本身份验证/ urlfetch(希望您不需要更高级的摘要身份验证),请参阅http://chillorb.com/?p=195(包括simpx的评论,它需要使事情工作;-)。 – 2009-12-14 18:56:06

1

除非我不完全理解你的问题,您可以从Response Object usin中获取返回码g status_code属性。

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

+0

你好jldupont !!!感谢yu的回复。如果我用你建议的方式,我总是得到200号,这就是我得到的。请检查我刚才添加到此问题的主要字段中的代码。 – brilliant 2009-12-14 16:35:47

+0

嗯...你指的是经过验证的请求呢?您需要在请求的标题中提供信息。 'fetch()'函数允许设置标题字段。 – jldupont 2009-12-14 16:39:31

+0

谢谢,jldupont!我会花一些时间来研究它。 – brilliant 2009-12-15 18:34:33

1

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

+0

谢谢你,尼克,这个输入。我会花一些时间查看Alex提供的材料,然后再回顾一下具体细节。 – brilliant 2009-12-15 18:47:02

1

你没有得到401,因为该网站没有返回401但总是200。通常我们为网站编码的类型是返回200,并在页面上显示“请登录..blah blah”,如果网站返回200以外的任何其他浏览器将不会显示时髦的错误消息。

所以简而言之,就像我在其他问题中提到的那样,您需要查看登录页面,查看它使用的参数e。g登录= xxx,密码= yyy,将其发布到该页面,并且您也必须管理这些cookie,即像斜纹等库进入图片。

+0

谢谢Anurag Unival!我有点担心这种可能性必须处理饼干,但你的这个答案给了我一些希望。 – brilliant 2009-12-15 18:44:16

+0

Anurag,这里是你建议的延续。如果您有时间和愿望,请查看:http://stackoverflow.com/questions/1914275/googles-app-engine-python-how-to-get-parameters-from-a-log-in-pages – brilliant 2009-12-16 12:12:25