urlfetch重定向到python中的无限循环

时间:2012-02-23 20:32:28

标签: python google-app-engine redirect infinite-loop urlfetch

我正在尝试加载重定向到自己的网址。我假设它加载一个cookie并且它正在寻找它,但它从未看到它所以有这种无限循环的请求。

我尝试过urllib2,urlfetch和httplib2。没有工作。

我尝试了这个:

url = "http://www.cafebonappetit.com/menu/your-cafe/collins-cmc/cafes/details/50/collins-bistro"
thing = urllib2.HTTPRedirectHandler()
thing2 = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(thing, thing2)
url = 'http://www.nytimes.com/2005/10/26/business/26fed.html?pagewanted=print'
page = opener.open(url)

这适用于shell,但不适用于Google App Engine。在urlfetch的文档中: http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html

在follow_redirects下,它说: “重定向时不处理Cookie。如果需要cookie处理,请将follow_redirects设置为False并手动处理Cookie和重定向。”

我不知道如何做到这一点,文档似乎也没有提供任何线索。

我用Google搜索了这个问题,并且没有报告这样的问题可以解决我的问题。

1 个答案:

答案 0 :(得分:5)

多一点解释。很高兴至少解释了网站的行为:它想要一些cookie,如果没有设置cookie,它会使用cookie设置头重定向到自己。您应该了解Cookie的工作原理;网站使用Set-Cookie标头发送cookie,浏览器必须在Cookie标头中回显(带有一些变化)。 Python有一个用于管理cookie集合的库,cookielib可以帮助你解决这个问题。

最好使用native urlfetch API;它的返回对象有一个头对象,它是一个给出所有头的dict(例如Set-Cookie头)。要发送特定标头,请使用urlfetch.fetch()函数的headers参数。在这里,您将使用Cookie标头(但请记住,您设置的Cookie标头的格式与您收到的Set-Cookie标头的格式不同 - 这就是cookielib的用武之地。

祝你好运!

PS。使用curl -v很容易看出该网站实际上发送了三个不同的Set-Cookie标头。你可能不得不处理这三个问题。