py request:
# coding=utf-8
from __future__ import print_function
import requests
headers = {
# 'content-type': 'application/json',
'content-type': 'application/x-www-form-urlencoded',
}
params = {
'a': 1,
'b': [2, 3, 4],
}
url = "http://localhost:9393/server.php"
resp = requests.post(url, data=params, headers=headers)
print(resp.content)
php recieve:
// get HTTP Body
$entityBody = file_get_contents('php://input');
// $entityBody is: "a=1&b=2&b=3&b=4"
// get POST
$post = $_POST;
// $post = ['a' => 1, 'b' => 4]
// $post missing array item: 2, 3
Because I also using jQuery Ajax POST which default content-type = application/x-www-form-urlencoded. And PHP default $_POST only stores value :
An associative array of variables passed to the current script via the HTTP POST method when using application/x-www-form-urlencoded or multipart/form-data as the HTTP Content-Type in the request.
http://php.net/manual/en/reserved.variables.post.php
So, I want to also use Python request the same as jQuery default behavior, What can I do?
Best Answer
PHP will only accept multiple values for variables with square brackets, indicating an array (see this FAQ entry).
So you will need to make your python script to send
a=1&b[]=2&b[]=3&b[]=4
and then$_POST
on PHP side will look like this: