通过python接收HTTP POST响应

时间:2014-09-15 18:18:01

标签: php python html http post

我使用以下示例: http://www.w3schools.com/php/php_forms.asp

当我从浏览器运行时, 我在浏览器中看到了结果:

Welcome John
Your email address is john.doe@example.com

当我运行python POST http请求时:

import httplib, urllib
params = urllib.urlencode({'@name': 'John','@email': 'John.doe@example.com'})
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/html"}
conn = httplib.HTTPConnection("10.0.0.201")
conn.request("POST","/welcome.php",params, headers)
response = conn.getresponse()
print "Status"
print response.status
print "Reason"
print response.reason
print "Read"
print response.read()
conn.close()

我看到以下内容:

Status
200
Reason
OK
Read
<html>
<body>

Welcome <br>
Your email address is: 
</body>
</html>

问题是: 如何在python中接收POST请求数据?

3 个答案:

答案 0 :(得分:2)

您使用了错误的表单名称​​和错误的HTTP方法。开头没有@个字符:

params = urllib.urlencode({'name': 'John','email': 'John.doe@example.com'})

接下来,您指向的表单使用 GET ,而不是 POST 作为处理方法,因此您必须将这些参数添加到URL中:

conn.request("GET", "/welcome.php?" + params, '', headers)

您尝试手动驾驶HTTPConnection(),这对您自己是一种伤害。您可以使用urllib2.urlopen()代替:

from urllib2 import urlopen
from urllib import urlencode

params = urlencode({'name': 'John','email': 'John.doe@example.com'})
response = urlopen('http://10.0.0.201/welcome.php?' + params)
print response.read()

或者您可以使用requests library(单独安装)让自己更容易:

import requests

params = {'name': 'John','email': 'John.doe@example.com'}
response = requests.get('http://10.0.0.201/welcome.php', params=params)
print response.content

答案 1 :(得分:0)

不要使用urllib,而是使用Martijn建议的requests库。它会使事情变得更简单。

查看文档:{​​{3}}

答案 2 :(得分:0)

我刚删除了“@”并且它有效:

Status
200
Reason
OK
Read
<html>
<body>

Welcome John<br>
Your email address is: John.doe@example.com
</body>
</html>

谢谢Martijn Pieters。

对于POST方法,我使用该示例进行基础结构测试。 最后我需要填充mysql数据库并使用python脚本通过php检索数据。 它的最佳方法是什么? 为什么不建议使用HTTPConnection()?