如何使用Python将HTTP POST值发送到(PHP)页面?

时间:2009-03-10 10:02:22

标签: php python post

我有一个PHP页面,其中有1个文本框,当我按下提交按钮时。我的SQL将把这个产品名称存储到我的数据库中。我的问题是;是否可以使用Python脚本发送/发布产品名称,该脚本要求1个值,然后使用我的PHP页面将其发送到我的数据库?谢谢!

6 个答案:

答案 0 :(得分:5)

查看urllib和urllib2模块。

http://docs.python.org/library/urllib2.html

http://docs.python.org/library/urllib.html

只需使用所需数据创建一个Request对象。然后从PHP服务中读取响应。

http://docs.python.org/library/urllib2.html#urllib2.Request

答案 1 :(得分:3)

在测试或使用python自动化网站时,我喜欢使用斜纹。 Twill是一种自动处理cookie的工具,可以读取HTML表单并提交。

例如,如果您在网页上有表格,可以想象使用以下代码:

from twill import commands
commands.go('http://example.com/create_product')
commands.formvalue('formname', 'product', 'new value')
commands.submit()

这会加载表单,填写值并提交。

答案 2 :(得分:3)

我发现http://www.voidspace.org.uk/python/articles/urllib2.shtml是关于urllib2的一个很好的信息来源,这可能是这项工作的最佳工具。

import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
values = {'name' : 'Michael Foord',
          'location' : 'Northampton',
          'language' : 'Python' }
headers = { 'User-Agent' : user_agent }

data = urllib.urlencode(values)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
the_page = response.read()

编码实际上是使用urllib完成的,这支持HTTP POST。还有一种使用GET的方法,您必须将数据传递到urlencode。

不要忘记调用read(),否则请求将无法完成。

答案 3 :(得分:2)

是。 urllib2是一种很好的Python方式来形成/发送HTTP请求。

答案 4 :(得分:1)

我个人更喜欢使用请求。作为总结,这是一个用于Python的 HTTP库,为人类构建

要快速解决问题,而不是深入研究HTTP,请求将是更好的选择。 (是的,我的意思是与 urllib socket 相比)

例如, 一个python文件,用userdata发送POST请求:

import requests
userdata = {"firstname": "Smith", "lastname": "Ayasaki", "password": "123456"}
resp = requests.post('http://example.com/test.php', data = userdata)

以下text.php处理此请求:

$firstname = htmlspecialchars($_POST["firstname"]);
$lastname = htmlspecialchars($_POST["lastname"]);
$password = htmlspecialchars($_POST["password"]);
echo "FIRSTNAME: $firstname  LASTNAME: $lastname  PW: $password";

最后,响应文本(python中的resp.content)将如下:

  

FIRSTNAME:Smith LASTNAME:Ayasaki PW:123456

答案 5 :(得分:0)

只是@antileet程序的附录,如果您尝试使用类似Web服务的有效负载执行HTTP POST请求,它的工作方式类似,只是省略了urlencode步骤;即。

import urllib, urllib2

payload = """
<?xml version='1.0'?>
<web_service_request>
    <short_order>Spam</short_order>
    <short_order>Eggs</short_order>
</web_service_request>
""".strip()
query_string_values = {'test': 1}
uri = 'http://example.com'

# You can still encode values in the query string, even though
# it's a POST request. Nice to have this when your payload is
# a chunk of text.
if query_string_values:
    uri = ''.join([uri, '/?', urllib.urlencode(query_string_values)])
req = urllib2.Request(uri, data=payload)
assert req.get_method() == 'POST'
response = urllib2.urlopen(req)
print 'Response:', response.read()