【问题标题】:Authenticated request in Google App Engine using fetch() function: how to provide the information in the header of the request? [closed]使用 fetch() 函数在 Google App Engine 中验证请求:如何在请求的标头中提供信息? [关闭]
【发布时间】:2009-12-16 07:05:03
【问题描述】:

我正在尝试使用 Google App Engine 将我的密码和 ID 自动传递到该页面:

https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=0&ru=http%3A%2F%2Fcgi5.ebay.com%2Fws2%2FeBayISAPI.dll%3FSellItem%26hm%3Dum.rundkoi376%26%26hc%3D1%26guest%3D1&pageType=1144

(这是我从这个 URL 重定向到的地方:https://signin.ebay.com)。页面如下所示:
(来源:narod.ru

早些时候我问了一些问题,here 一位非常好的支持者建议我使用此链接中的代码:http://chillorb.com/?p=195 如果您没有时间去那里,该页面的外观如下:


(来源:narod.ru

所以,我将该代码粘贴到我的编辑器中,替换为有效的 eBay URL、我的 ID 和密码。我的 ID 是 seeyousoondanny,密码是 happy1(我在 eBay 上创建该帐户只是为了进行实验,所以我不怕泄露我的 ID 和密码)。以下是代码在我的编辑器中的样子:


(来源:narod.ru

但是当我运行这段代码时,我得到的只有这个:


(来源:narod.ru

我在这里做错了什么?

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

加法:

这是错误页面的底部(我想如果你click on the link to this image会看得更清楚):

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

加法:

我猜这段代码没有语法错误:

from google.appengine.api import urlfetch
import base64

url = "https://signin.ebay.com/ws/eBayISAPI.dll?SignIn&UsingSSL=1&pUserId=&co_partnerId=2&siteid=0&ru=http%3A%2F%2Fcgi5.ebay.com%2Fws2%2FeBayISAPI.dll%3FSellItem%26hm%3Dum.rundkoi376%26%26hc%3D1%26guest%3D1&pageType=1144"
authString = 'Basic' + base64.encodestring('seeyousoondanny:happy1')
data = urlfetch.fetch(url, headers= {'AUTHORIZATION' : authString })
if data.status_code == 200:
   print "content-type: text/plain"
   print
   print data.status_code

【问题讨论】:

    标签: python google-app-engine header authorization


    【解决方案1】:

    我不确定这是否有帮助,但 ebay 有一个更易于使用和合并的 API。查看http://developer.ebay.com/businessbenefits/aboutus/

    【讨论】:

    • aldrin,你仿佛为我打开了另一个世界!我从来没有听说过这个。我仍然会尝试继续 Google App Engines 的方式,因为我已经花了很多时间在上面,其他人也花时间在这里帮助我,但至少现在我知道还有另一种方式,我一定会去探索的。再次感谢!
    • 请注意,如果您使用 API 而不是使用他们的 API 来抓取大型网站的页面,他们几乎肯定会最终检测到它并阻止您访问该网站。
    • @Wooble:“......他们几乎肯定最终会检测到它并阻止您访问该站点” - 感谢您告诉我。但我不明白,他们为什么需要这样做?如果我只是使用我的 API 在他们的网站上登录我的帐户并检查那里的一些页面怎么办?例如,在 eBay 上查看我的 eBay 摘要页面。他们还会为此不高兴吗?
    • @brilliant 在 ebay 注册时,您肯定会同意他们的用户协议,该协议禁止任何形式的抓取/自动访问(请参阅pages.ebay.com/help/policies/user-agreement.html)。取决于您的应用目的:) 这是一个灰色区域。但是,正如 Wooble 所说,请注意您的帐户被锁定。
    • 好吧,我想只要它在合理的范围内应该没问题。 (比如说,24 小时内每分钟的请求频率可能看起来很可疑 :))
    【解决方案2】:

    看起来有些引号字符是错误的——颠倒的“智能引号”而不是普通的普通 ASCII 引号字符。很难从截图中准确地说出来!您显示的错误屏幕(来自 GAE 的 SDK)在最底部显示错误的确切位置 - 您显示它一直滚动到最顶部,所以它没有帮助。

    在 GAE 中,与 Python 的任何其他使用一样,引用是通过普通的单引号和双引号字符完成的:'"通过倾斜、倒置或“智能”引号字符,例如

    `
    

    (很难在 SO 中清楚地显示倒单引号,除非作为代码块,因为它用于标记内联代码;-)或 等等。因此,请仔细检查您的代码,以确保您使用的是普通的、普通的引号!

    【讨论】:

    • 啊啊啊!谢谢你,亚历克斯!现在我明白了为什么我的编辑器多次给我一个编码错误信息。我现在将尝试进行这些更正,并且我已经添加了页面底部的屏幕截图。
    • Alex,我想我终于找到了正确的组合(请参阅我刚刚在我的问题中添加的代码)。当最后一行是“print data.content”(不带引号)时,它会显示该页面的 HTML 代码,而当它是“print data.status_code”(不带引号)时,它会再次显示... 200!所以,我似乎遇到了同样的问题——我仍然得到这个 200,而且我的 ID 和密码似乎没有传递到网站。
    • @brilliant,也许 ebay 想要摘要式身份验证,在这种情况下,您最好使用 urllib2 提供的功能,因为 GAE 支持 urllib2(urllib2 也支持基本身份验证,但是有时,这可能更容易用手伪造;-)。
    • @brilliant,urllib2 是 Python 标准库的一部分。
    • @brilliant,是的,如果你有完整且正确的 Python 安装,它确实包含 urllib2。
    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多