virtualenv之间的无法解释的Urllib2问题.

Tim*_*ony 5 python cookies http mechanize urllib2

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

  • 登录远程网站
  • 转到另一个页面
  • 填写表格进行POST

我在3台不同的机器上创建了4个独立的,干净的virtualenvs(带有--no-site-packages),所有机器都有不同版本的python,但是完全相同的包(通过pip requirements文件),代码只适用于两个我的本地开发机器(2.6.1和2.7.2)上的virtualenvs - 它不适用于我的任何一个生产VPS

在失败的情况下,我可以成功登录,移动到正确的页面但是当我提交表单时,远程服务器回复告诉我发生了错误 - 这是一个应用程序服务器错误页面('我们无法完成你的请求')而不是网络服务器错误.

  • 因为我可以成功登录并操作到第二页,这似乎不是会话或cookie问题 - 这对于最终的POST是特别的
  • 因为我可以使用EXACT相同的标题和数据在特定的机器上执行操作,这似乎不是我请求/发布的问题
  • 因为我正在尝试从不同公司租用的两个独立VPS上的代码,这似乎不是VPS物理环境的问题
  • 因为代码适用于2个不同的python版本,我无法想象它是一个无法解决的问题

在这个阶段我完全迷失了为什么这不起作用.我甚至'再次关闭它 - 因为我无法看到问题可能是什么.

我认为它必须与来自远程服务器不喜欢的VPS的最终POST有关,但我无法弄清楚它可能是什么.我觉得在URLlib的引擎下发生了一些导致远程服务器不喜欢回复的事情.

编辑 我在VPS上安装了与我工作的本地副本完全相同的Python版本(2.6.1),它不能远程工作,所以它必须与源自VPS的东西有关.这怎么会影响Http请求?是低级别的吗?

Tim*_*ony 0

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

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

我不知道这是因为第 3 方服务器的情况,还是 URLlib 的某种奇怪问题?它似乎在我的开发机器上工作的原因大概是因为它运行代码的速度比服务器慢?