googleappengine URL Fetch在产品上不起作用

2024-04-26 19:04:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用googleappengine的urlphetch功能远程登录到另一个web服务。在开发过程中一切正常,但是当我转到生产环境时,登录过程失败了。你对如何调试生产URL获取有什么建议吗?在

我在我的URL获取中使用cookies和其他头文件(我在头文件中手动设置cookies)。其中一个cookie是会话cookie。在

没有错误或异常。在生产环境中,将登录信息发布到URL命令将返回会话cookie,但是当您使用会话cookie请求页面时,它们将被忽略,并且再次提示您输入登录信息。在开发中,一旦你得到了会话cookie,你就可以访问内部页面了。我以为问题与保存cookies有关,但是它们看起来是正确的,因为请求几乎完全相同。在

我这样称呼它:

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的url fetch实现的分布式特性正在把事情搞砸。在
  • 在生产环境中,邮件头的发送顺序与开发中的顺序不同,这可能会混淆服务器。在
  • 谷歌的一些服务器被目标服务器列入黑名单。在

我排除了一些假设:

  • 谷歌缓存太激进了。但是在使用头缓存控件关闭缓存后,我仍然遇到问题:没有存储。在
  • Google的urlphetch对于目标服务器来说太快了。但在插入两次通话之间的延迟之后,我还是遇到了问题。在
  • Google将一些数据附加到用户代理头中。但我已经在开发中添加了这个标题,我不明白问题所在。在

生产URL获取和开发URL获取之间还有什么其他区别?你对调试有什么想法吗?在

更新2

(第一次更新包含在上面) 我不知道这是否是我做的事情(可能是添加延迟或禁用上面提到的缓存),但现在生产环境大约有50%的时间都在工作。这显然是一种比赛状态。不幸的是,我不知道问题出在我的代码,谷歌的代码,还是目标服务器的代码中。在


Tags: 代码服务器信息url目标环境头文件过程
3条回答

有些IP头和其他IP头的区别是如何处理的。请参见here以获取受限制标头的列表。我不知道这是否有文档记录,但是在prod中,您的appid被附加到用户代理的末尾。我曾经有一个问题,prod only中的请求被检测为搜索引擎蜘蛛,因为我的应用程序ID包含字符串“bot”。在

您提到要手动设置cookies,包括会话cookie。这是否意味着您在Dev中建立了一个会话,然后试图在prod中重用它?远程服务器是否可能正在记录建立会话的源IP,并要求后续请求来自同一IP?在

你说这不管用,但你没有例外。这到底是什么意思?你得到了一个HTTP200和一个空的响应体?另一个HTTP状态?最好的办法可能是联系远程服务的所有者,看看他们是否可以更具体地告诉你,你的请求出了什么问题。其他一切都只是猜测。在

检查服务器的日志,看看GAE是否切掉了任何头。我注意到GAE(我想我在dev服务器上见过)会切掉它不喜欢的头。在

根据您调用的web服务的不同,GAE调用它可能比本地机器更不合适。在

我在制作一个webapp时遇到了一个类似的问题——当查看urlfetch's documentation时,发现fetch调用的最大超时为60秒,但默认为5秒。在

在我的本地机器上5秒的时间足够在我的本地机器上请求url,但是在GAE上,它只有20%的时间在5秒内完成任务。在

我包含了参数deadline=60,从那以后它一直工作得很好。在

希望这能帮助别人!在

相关问题 更多 >