我正在使用谷歌应用引擎的urlfetch功能来远程登录到其他网络服务。一切工作都很好,但是当我转到生产时,登录过程失败。您对如何调试生产URL获取有任何建议吗?Google App引擎网址抓取不适用于生产
我在我的URL获取中使用cookie和其他标题(我手动设置标头中的cookie)。其中一个cookie是会话cookie。
没有错误或异常。在生产中,向URL命令发布登录会返回会话cookie,但当您使用会话cookie请求页面时,它们将被忽略,并且系统会再次提示您输入登录信息。开发一旦你获得会话cookie,你可以访问内部页面就好。我认为问题与保存cookie有关,但由于请求几乎完全相同,所以它们看起来是正确的。
这是我怎么称呼它:
fetchresp = urlfetch.fetch(url=req.get_full_url(),
payload=req.get_data(),
method=method,
headers=all_headers,
allow_truncated=False,
follow_redirects=False,
deadline=10
)
这里有一些猜测的问题:
- 谷歌的网址的分布式特性获取实现搞乱的东西了。
- 在生产时,标题的发送顺序与开发顺序不同,也许令服务器感到困惑。
- 谷歌的一些服务器被目标服务器列入黑名单。
下面是一些假设,我已经排除了:
- 谷歌缓存是过于激进。但是,在使用头缓存控制:无存储关闭缓存后,我仍然遇到问题。
- Google的urlfetch对目标服务器来说太快了。但在通话之间插入延迟后,我仍然遇到问题。
- Google将一些数据附加到User-Agent标题。但是我已经将这个标题添加到了开发中,而我没有遇到问题。
生产URL获取和开发URL获取之间还有什么其他区别?你有任何想法来调试吗?
更新2
(首先更新上面合并) 我不知道这是否是我做的事(或许将延迟或禁止上述缓存),但现在的生产环境中工作的大约50%的时间。这绝对看起来像一个竞争条件。不幸的是,我不知道问题出在我的代码,谷歌代码还是目标服务器的代码中。
除了“不工作”之外,您还未提供任何其他详细信息 - 运行此代码时会发生什么情况?您是否尝试将它指向您控制的站点,以便您可以记录收到的请求? –
好主意。我试着将它指向一个控制站点,并且我已经区分了两个请求对象。它们几乎完全相同。也许谷歌的IP被列入黑名单,我不确定。 – speedplane
您仍然没有解释在这种情况下“不起作用”的含义。 –