【问题标题】:Inexplicable Urllib2 problem between virtualenv's.virtualenv 之间莫名其妙的 Urllib2 问题。
【发布时间】:2011-11-22 10:45:06
【问题描述】:

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

  • 登录远程网站
  • 移至另一页
  • 通过填写表单执行 POST

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

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

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

在这个阶段我完全不知道为什么这不起作用。我什至“关掉它再打开它”,因为我看不出问题出在哪里。

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

编辑 我在 VPS 上安装了与我的本地工作副本完全相同的 Python 版本(2.6.1),它不能远程工作,所以它一定与源自 VPS 有关。这如何影响 Http 请求?是不是比较低级?

【问题讨论】:

  • VPS 或目标网站上是否有防火墙运行?您是否使用 cookie,如果使用,它们是否在生产环境中正确编写?
  • 不,我在两个独立的 VPS 上运行它,但两者都不起作用,但我认为它们不在防火墙后面。我在 cookielib 中使用 cookie,但我认为这不是问题,因为 cookie 适用于前两个操作(登录和更改页面)

标签: python http cookies urllib2 mechanize


【解决方案1】:

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

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

【讨论】:

  • 我已经用一把细齿梳子穿过了它们!我还将工作的那些与非工作的进行了比较,它们几乎相同。我将编辑并提供一些示例
【解决方案2】:

这完全是在黑暗中拍摄,但是您的 VPS 是 64 位的,而您的家用计算机是 32 位的,反之亦然? something 的默认大小或精度的差异可能会吓坏服务器。

除此之外,您能否尝试找出有关 Web 服务器正在使用的软件堆栈的任何信息?

【讨论】:

  • 好建议,但不幸的是它们是一样的!
【解决方案3】:

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

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

【讨论】:

  • 我认为这可能是现阶段唯一的选择。我已经尽一切可能让它工作,我只能想象这是一个模糊的兼容性问题。我实际上使用的是 Mechanize,它非常好,但不幸的是,我相信它位于 Urllib2 之上,这意味着会发生同样的问题。
【解决方案4】:

好吧,看来我知道为什么会出现问题,但我不是 100% 的原因。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 2012-03-12
    • 2019-02-04
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多