Python virtualenv与x27之间的难以解释的Urllib2问题;s

Python virtualenv与x27之间的难以解释的Urllib2问题;s,python,http,cookies,urllib2,mechanize,Python,Http,Cookies,Urllib2,Mechanize,我有一些测试代码(作为webapp的一部分)使用urllib2执行我通常通过浏览器执行的操作: 登录到远程网站 移到另一页 通过填写表格来完成一个职位 我已经在3台不同的机器上创建了4个独立的、干净的VirtualNV(没有站点包),它们都使用不同版本的python,但是包完全相同(通过pip需求文件),代码只在我本地开发机器上的两个VirtualNV(2.6.1和2.7.2)上工作-它在我的两个生产VPS上都不工作 在失败的情况下,我可以成功登录,移动到正确的页面,但当我提交表单时,远程服

我有一些测试代码(作为webapp的一部分)使用urllib2执行我通常通过浏览器执行的操作:

  • 登录到远程网站
  • 移到另一页
  • 通过填写表格来完成一个职位
我已经在3台不同的机器上创建了4个独立的、干净的VirtualNV(没有站点包),它们都使用不同版本的python,但是包完全相同(通过pip需求文件),代码只在我本地开发机器上的两个VirtualNV(2.6.1和2.7.2)上工作-它在我的两个生产VPS上都不工作

在失败的情况下,我可以成功登录,移动到正确的页面,但当我提交表单时,远程服务器答复我出现错误-这是应用程序服务器错误页面(“我们无法完成您的请求”),而不是Web服务器错误

  • 因为我可以成功地登录到第二个页面,这似乎不是一个会话或cookie问题——这是最后一篇文章所特有的
  • 因为我可以使用完全相同的标题和数据在特定的机器上执行操作,所以我请求/发布的内容似乎没有问题
  • 因为我在从不同公司租用的两个独立VP上尝试代码,所以VPS物理环境似乎没有问题
  • 因为代码在两个不同的python版本上工作,所以我无法想象这是一个不兼容的问题
在这个阶段,我完全不明白为什么这样做行不通。我甚至“把它关掉,然后再打开”,因为我看不出问题出在哪里

我认为这与来自远程服务器不喜欢的VPS的最后一篇文章有关,但我不知道这可能是什么。我觉得在URLlib的保护下发生了一些事情,导致远程服务器不喜欢回复

编辑
我在VPS上安装的Python版本(2.6.1)与在我的本地工作副本上安装的完全相同,并且它不能远程工作,因此它必须与从VPS发起有关。这将如何影响Http请求?它是较低级别的吗?

您可以尝试为urllib2设置debuglevel=1,并查看它的结果:

import urllib2
h=urllib2.HTTPHandler(debuglevel=1)
opener = urllib2.build_opener(h)
...

这完全是瞎猜,但您的VPSs是64位还是家庭计算机是32位,反之亦然?也许默认大小或精度的差异可能会吓坏服务器


除此之外,您是否可以尝试查找有关web服务器正在使用的软件堆栈的任何信息

我在使用urllib2(使用Zimbra的RESTAPI)时遇到了类似的问题,最后成功地切换到pycurl

PS
对于登录/导航/发布的操作,我通常觉得很有用,也很容易使用。也许你可以给它一个展示。

嗯,看起来我知道问题发生的原因,但我不是100%的原因

我只需让服务器在发送第二个请求(移动到另一页)后等待(time.sleep()),然后再执行第三个请求(通过填写表单执行POST)


我不知道这是因为第三方服务器的问题,还是URLlib出现了某种奇怪的问题?它在我的开发机器上运行的原因大概是因为它在运行代码时比服务器慢

VPS或目标网站上是否有运行的防火墙?你在使用cookie吗?如果是的话,它们在生产中是否被正确写入?不,我在两个独立的VPS上运行它,这两个VPS都不起作用,但我不认为它们在防火墙后面。我在cookielib中使用Cookie,但我认为这不是问题所在,因为Cookie适用于前两个操作(登录和更改页面),我已经仔细梳理了它们!我还比较了工作的和不工作的,它们是完全相同的。我将编辑并提供一些示例。我认为这可能是目前阶段的唯一选择。我已经尽了一切可能让它工作,我只能想象这是一个模糊的兼容性问题。我实际上使用的是Mechanize,它非常优秀,但不幸的是,我相信它位于Urllib2之上,这意味着同样的问题也会发生。这是一个很好的建议,但不幸的是它们是一样的!