【发布时间】: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