Python GAE请求在获取请求后不返回cookie

时间:2013-08-06 12:44:53

标签: python google-app-engine python-requests

我已经在python中编写了一个项目,我现在正在转向谷歌应用引擎。出现的问题是我在GAE上运行此代码:

import requests
from google.appengine.api import urlfetch

def retrievePage(url, id):
    response = 'http://online2.citybreak.com/Book/Package/Result.aspx?onlineid=%s' % id
    # Set the timeout to 60 seconds
    urlfetch.set_default_fetch_deadline(60)

    # Send the first request
    r1 = requests.get(url)

    cookies = r1.cookies

    print 'Cookies: %s' % r1.cookies

    # Retrieve the content
    r2 = requests.get(response, cookies=cookies)
    return r2.text

在GAE上运行代码时,第一个请求中的cookie丢失了。也就是说,r1.cookies只是一个空的饼干罐。相同的代码在我的django服务器上工作得很好,其中cookie应该包含一个asp.net会话ID。

我有两个请求的原因是因为第一个请求会重定向用户,并且只有在会话cookie相同时才会检索正确的页面。

在GAE上打印输出:

Cookies: <<class 'requests.cookies.RequestsCookieJar'>[]>

在Django上打印输出:

Cookies: <<class 'requests.cookies.RequestsCookieJar'>[<Cookie ASP.NET_SessionId=dhmk1vt3ujgmhhhmbwsclukb for online2.citybreak.com/>]>

任何人都知道问题可能是什么? GAE是否剥离了cookie信息?我也对另一种检索页面的方式提出了建议,我发现请求模块比我找到的替代方案更容易。

2 个答案:

答案 0 :(得分:0)

我试过urlfetch它好像在显示cookie标题:

import logging
from google.appengine.api import urlfetch

response = urlfetch.fetch(url)
logging.info(response.headers)

答案 1 :(得分:0)

这里有一个PR(补丁):https://github.com/kennethreitz/requests/pull/4044用于解决您(和许多其他人)的问题。在生产和开发中使用GAE进行测试。