3

我正在尝试加载一个重定向到自身的 url。我假设它正在加载一个 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 和重定向。”

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

我用谷歌搜索了这个问题,没有报告过这样的问题可以解决我的问题。

4

1 回答 1

5

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

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

祝你好运!

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

于 2012-02-24T03:32:32.280 回答