我正在使用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
)
以下是对这个问题的一些猜测:
我排除了一些假设:
生产URL获取和开发URL获取之间还有什么其他区别?你对调试有什么想法吗?在
更新2
(第一次更新包含在上面) 我不知道这是否是我做的事情(可能是添加延迟或禁用上面提到的缓存),但现在生产环境大约有50%的时间都在工作。这显然是一种比赛状态。不幸的是,我不知道问题出在我的代码,谷歌的代码,还是目标服务器的代码中。在
有些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
,从那以后它一直工作得很好。在希望这能帮助别人!在
相关问题 更多 >
编程相关推荐