使用Python中的POST将数据发送到PHP

Cra*_*ard 13 php python urllib2

PHP代码:

<?php
$data=$_POST['data'];
echo $data;
?>
Run Code Online (Sandbox Code Playgroud)

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

$ name错误; 未定义的索引

但是,当我将数据作为GET(http://localhost/mine.php?data=data)发送并将PHP方法从POST更改为GET($data=$_GET['data'])时,将获取并处理该值.

我的主要问题是,数据中的值似乎没有通过PHP,因为我本想使用POST.可能有什么不对?

The*_*ohn 32

看看这个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
Run Code Online (Sandbox Code Playgroud)

几乎一切都在那里看第2行

继承人PHP:

<?php
echo $_POST['one'];
echo $_POST['two'];
?>
Run Code Online (Sandbox Code Playgroud)

这应该给你

1
2
Run Code Online (Sandbox Code Playgroud)

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


use*_*754 6

有很多文章建议使用请求而不是Urlliburllib2.(阅读参考资料以获取更多信息,首先是解决方案)

你的Python文件(test.php):

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

你的PHP文件:

$firstname = htmlspecialchars($_GET["firstname"]);
$lastname = htmlspecialchars($_GET["lastname"]);
$password = htmlspecialchars($_GET["password"]);
echo "firstname: $firstname lastname: $lastname password: $password";
Run Code Online (Sandbox Code Playgroud)

名字:John姓:Doe密码:jdoe123

参考文献:

1)好文章,为什么你应该使用请求

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


Ili*_*iev 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)
Run Code Online (Sandbox Code Playgroud)