在Python中模拟HTTP Post请求

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

在我看来,可能导致邮件请求失败问题的两个原因可能是:</ p>
\ n


  1. 可能会发生一种重定向</ li>
  2. 服务器需要一个合适的cookie </ li>
    </ ol>

    接下来,你 将找到目标页面的HTML代码和应该工作的Python代码。</ p>

    HTML:</ p>

     &lt; form id =  “m713a0moduleform_2”method =“post”action =“http://www.XY/index.php?page = login”class =“cms_form”&gt; 
    &lt; input type =“hidden”name =“mact”value = “FrontEndUsers,m713a0,do_login,1”/&gt;
    &lt; input type =“hidden”name =“m713a0returnid”value =“794”/&gt;
    &lt; input type =“hidden”name =“page”value = “794”/&gt;
    &lt; input type =“hidden”name =“m713a0form”value =“login”/&gt;
    &lt; input type =“text”class =“cms_textfield”name =“m713a0feu_input_username”id =“ m713a0feu_input_username“value =”“size =”10“maxlength =”40“/&gt;
    &lt; input type =”password“class =”cms_password“name =”m713a0feu_i nput_password“value =”“size =”10“maxlength =”10“/&gt;
    &lt; input class =”cms_submit“name =”m713a0feu_btn_login“id =”m713a0feu_btn_login“value =”登录“type =”submit“class =“signin_button”/&gt;
    &lt; / form&gt;
    </ code> </ pre>

    Python:</ p>

      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”:“登录”})
    f = urllib.urlopen(“http://www.XY/index.php?page = login”,params)
    print f .read()
    </ code> </ pre>

    我收到以下错误。 任何想法?</ p>

     Traceback(最近一次调用最后一次):
    文件“/X/Y/Z/NewPythonProject2/src/newpythonproject2.py”,第34行,
    来自粘贴 .proxy import TransparentProxy
    ImportError:没有名为paste </ pre>
    </ div>的模块

展开原文

原文

I am trying to send a HTTP post request in a PHP page. I gave a try on both Java and Python (this was the first time I used Python) and I can say that both of them worked almost fine for me. Actually, they worked fine only for my test PHP page. For some reason, neither of them worked for my target PHP page.

In my opinion, two reasons that may cause the problem of unsuccessful post request could be:

  1. a kind of redirection may happen
  2. the server wants a proper cookie

Next, you will find the HTML code of the target page and the Python code that should be working.

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()

I receive the following error. Any ideas?

Traceback (most recent call last):
  File "/X/Y/Z/NewPythonProject2/src/newpythonproject2.py", line 34, in 
    from paste.proxy import TransparentProxy
ImportError: No module named paste

drlndkhib08556095
drlndkhib08556095 diveintopython.org/http_web_services/redirects.html介绍了如何处理重定向。
9 年多之前 回复

1个回答



我使用 paste.proxy.TransparentProxy webob.Request 。 .. </ p>

您需要安装库</ p>

  easy_install webob webtest paste 
</ code> </ pre>
\ n

或</ p>

  pip install webob webtest paste 
</ code> </ pre>

然后在脚本中... </ 来自paste.proxy的p>

 导入TransparentProxy 
来自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)
</ code> </ pre>

如果你需要做任何更好的事情,比如维护cookie 像cookie一样传递你的请求可以使用 WebTest ,你只需要几个陈 来自paste.proxy的ges </ p>

 导入TransparentProxy 
from webtest import TestApp
app = TestApp(TransparentProxy())
app.post(“http://pathto/your_file.php “,dict(field_a = value_a,field_b = value_b))
</ code> </ pre>
</ div>

展开原文

原文

I use paste.proxy.TransparentProxy and webob.Request ...

You need to install the libraries

easy_install webob webtest paste

or

pip install webob webtest paste

then in a script...

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)

if you need to do anything fancier like maintain cookies across requests like passing cookies back you could use WebTest and you would only a few changes

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))

douzhen5158
douzhen5158 你选择了一个熟悉python的复杂问题。 :)你可能会熟悉如何在python中安装库等方面做些什么。 因为现在是制作语言的图书馆。 如果我是你,我会安装virtualenv。 simononsoftware.com/virtualenv-tutorial然后你可以玩各种类型的libs而不是破坏你的系统python
9 年多之前 回复
duanlin1931
duanlin1931 你好汤姆! 非常感谢你的快速编辑,但我仍然没有得到它! 这些是我在Python中的第一行,这就是为什么即使我在网上努力搜索也无法弄清楚该怎么做...请你提供一些关于如何安装所有这些库的提示,鉴于我 我正在运行Ubuntu 10.10并且我正在使用NetBeans IDE 6.9.1? 非常感谢您的帮助! Eualin。
9 年多之前 回复
doushi9780
doushi9780 你必须安装easy_install粘贴webob webtest的库
9 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问