【问题标题】:Emulating a HTTP Post Request in Python在 Python 中模拟 HTTP Post 请求
【发布时间】:2011-04-13 23:14:06
【问题描述】:

我正在尝试在 PHP 页面中发送 HTTP 发布请求。我尝试了 Java 和 Python(这是我第一次使用 Python),我可以说它们对我来说几乎都很好。实际上,它们仅适用于我的测试 PHP 页面。出于某种原因,它们都不适用于我的目标 PHP 页面。

在我看来,可能导致post请求不成功的两个原因可能是:

  1. 可能会发生某种重定向
  2. 服务器需要一个合适的 cookie

接下来,您将找到目标页面的 HTML 代码和应该可以工作的 Python 代码。

HTML:

<form id="m713a0moduleform_2" method="post" action="http://www.X.Y/index.php?page=login" class="cms_form">
<input type="hidden" name="mact" value="FrontEndUsers,m713a0,do_login,1" />
<input type="hidden" name="m713a0returnid" value="794" />
<input type="hidden" name="page" value="794" />
<input type="hidden" name="m713a0form" value="login" />
<input type="text" class="cms_textfield" name="m713a0feu_input_username" id="m713a0feu_input_username" value="" size="10" maxlength="40" />
<input type="password" class="cms_password" name="m713a0feu_input_password" value="" size="10" maxlength="10" />
<input class="cms_submit" name="m713a0feu_btn_login" id="m713a0feu_btn_login" value="Sign in" type="submit" class="signin_button" />
</form>

Python:

import urllib
params = urllib.urlencode({"mact":"FrontEndUsers,m713a0,do_login,1","m713a0returnid":"18","page":"18","m713a0form":"login","m713a0feu_input_username":"Z","m713a0feu_input_password":"W","m713a0feu_btn_login":"Sign in"})
f = urllib.urlopen("http://www.X.Y/index.php?page=login", params)
print f.read()

我收到以下错误。有什么想法吗?

Traceback(最近一次调用最后一次):
  文件“/X/Y/Z/NewPythonProject2/src/newpythonproject2.py”,第 34 行,在
    从 paste.proxy 导入透明代理
ImportError:没有名为 paste 的模块

【问题讨论】:

标签: php python http post request


【解决方案1】:

我使用paste.proxy.TransparentProxywebob.Request ...

你需要安装库

easy_install webob webtest paste

pip install webob webtest paste

然后在脚本中...

from paste.proxy import TransparentProxy
from webob import Request
proxy_app = TransparentProxy()    
request = Request.blank("http://pathto/your_file.php", POST=dict(field_a=value_a,field_b=value_b))

response = request.get_response(proxy_app)

如果您需要做一些更有趣的事情,例如在请求之间维护 cookie,例如将 cookie 传回,您可以使用 WebTest,您只需进行一些更改

from paste.proxy import TransparentProxy
from webtest import TestApp
app = TestApp(TransparentProxy())    
app.post("http://pathto/your_file.php", dict(field_a=value_a,field_b=value_b))

【讨论】:

  • 这里有你必须安装的库 easy_install paste webob webtest
  • 嗨,汤姆!非常感谢您的快速编辑,但我仍然没有得到它!这些是我在 Python 中的第一行,这就是为什么即使我在网上努力搜索我也无法弄清楚该怎么做......你能否给我一些关于如何安装所有这些库的提示,因为我我正在运行 Ubuntu 10.10 并且我正在使用 NetBeans IDE 6.9.1?非常感谢您的帮助!尤林。
  • @eualin 你选择了一个有点复杂的问题来熟悉python。 :) 熟悉如何在 python 中安装库之类的操作可能会对您有所帮助。因为现在是图书馆创造了这种语言。如果我是你,我会安装 virtualenv。 simononsoftware.com/virtualenv-tutorial 然后你可以玩各种库而不破坏你的系统 python
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2012-01-10
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多