使用Python向PHP发送POST数据

16

PHP 代码:

<?php
$data=$_POST['data'];
echo $data;
?>

当我这样做时,Python打印的HTML页面通知我PHP没有在$data中接收到任何值,即:

错误在$name中;未定义索引

然而,当我将数据作为GET方式发送(http://localhost/mine.php?data=data),并将PHP方法从POST更改为GET($data=$_GET['data']),就可以获取并处理该值了。

我的主要问题是似乎值在data中无法通过POST传递给PHP。可能有什么问题?


5
考虑到我们中的很多人都不是能预知未来的先知,公布你的代码可能是一个好主意。 - Jim Brissom
4个回答

34

看看这个Python代码:

import urllib2, urllib
mydata=[('one','1'),('two','2')]    #The first is the var name the second is the value
mydata=urllib.urlencode(mydata)
path='http://localhost/new.php'    #the url you want to POST to
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
page=urllib2.urlopen(req).read()
print page

几乎所有的东西都在这里了,请看第二行。

以下是 PHP 代码:

<?php
echo $_POST['one'];
echo $_POST['two'];
?>

这应该会给你答案。

1
2

祝你好运,希望这有助于其他人


6

有很多文章建议使用 requests 而不是 Urlliburllib2。 (阅读参考资料以获取更多信息,先解决问题)

您的 Python 文件(test.php):

import requests
userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://yourserver.de/test.php', params=userdata)

您的PHP文件:
$firstname = htmlspecialchars($_GET["firstname"]);
$lastname = htmlspecialchars($_GET["lastname"]);
$password = htmlspecialchars($_GET["password"]);
echo "firstname: $firstname lastname: $lastname password: $password";

名字: John 姓氏: Doe 密码: jdoe123

参考资料:

1) 一篇很好的文章,解释了为什么你应该使用requests模块

2) urllib, urllib2和requests模块之间有什么区别?


5
import urllib
import urllib2

params = urllib.urlencode(parameters) # parameters is dicitonar
req = urllib2.Request(PP_URL, params) # PP_URL is the destionation URL
req.add_header("Content-type", "application/x-www-form-urlencoded")
response = urllib2.urlopen(req)

0

我找了一圈,只找到了这篇文章,它是一个起点,但我不得不花很多时间去更新它,我想发布一个更新,以便更新TheBestJohn的答案,因为他发送了原始版本。

注意:PHP代码是相同的。

import urllib.request
import urllib.parse

mydata=[('one','128'),('two','247')]
mydata=urllib.parse.urlencode(mydata)
utf8 = bytes(mydata, 'utf-8')
path='http://localhost/new.php'
page=urllib.request.urlopen(path, utf8, 300).read()
print(page)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接