在Python中通过POST向PHP发送数据

16 投票
4 回答
66141 浏览
提问于 2025-04-16 07: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']),就能成功获取并处理这个值。

我主要的问题是,似乎数据没有通过POST方式传递到PHP,而我本来想使用POST。那可能出什么问题呢?

4 个回答

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)
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模块之间有什么区别?

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

祝你好运,希望这能帮助到其他人。

撰写回答