Python中requests.Request()方法如何传递一个PHP可以接收的数组对象?

部分代码:

post_data = {“gameId”: 1,
“activityType”: 2,
“title”: “炉石常规 17 日 14:30”,
“activity_rule_id”: 3,
“activity_people”: 1,
“model”: “common”,
#timerule 是出问题的地方
“timerule”: “[‘2017-03-18 15:11’, ‘2017-03-18 15:21’, ‘2017-03-18 15:31’, ‘2017-03-18 15:41’]”,
“password”: 111111,
“remark”: “1111”,
“frozen”: “100”,
“common_rewardrule”: “{‘1’:‘60’,‘2’:‘30’,‘3’:‘10’}”}

request = requests.post(create_match_url, post_data, headers=headers)


post_data 中的 timerule , php 后台要求是一个 array ,请问怎么转换呢?
我尝试过写成这样:
“timerule”: [‘2017-03-18 15:11’, ‘2017-03-18 15:21’, ‘2017-03-18 15:31’, ‘2017-03-18 15:41’]
但是仍然不行。
requests.Request 方法传递 json 是不是只能转换成 str 呢?
Python中requests.Request()方法如何传递一个PHP可以接收的数组对象?


4 回复

这样其实是可以的,但是 php 需要先做 parse. 默认是 application/x-www-form-urlencoded 数据


在Python的requests库中,Request()方法本身不直接处理数据,通常我们使用requests.post()requests.get()等方法来发送请求并传递数据。要让PHP后端接收到一个数组,关键在于正确设置请求的数据格式和编码。

PHP通常通过$_POST$_GET超全局数组来接收表单数据。要让PHP的$_POST接收到一个数组,你需要在Python端发送的数据是“表单编码”的,并且键名要使用PHP能解析为数组的命名约定。

核心方法:使用字典嵌套或带方括号的键名

在Python中,你可以构造一个字典,其值本身是列表(或元组),或者使用带方括号的键名。requests库在发送时会将其编码为PHP可识别的格式。

示例代码:

import requests

# 方法一:值直接为列表(requests会将其编码为 key[]=value1&key[]=value2 的形式)
data_with_list = {
    'fruits[]': ['apple', 'banana', 'orange']
}

# 方法二:更精确地控制,使用元组列表(适用于需要非列表值或更复杂结构)
data_with_tuples = [
    ('fruits[]', 'apple'),
    ('fruits[]', 'banana'),
    ('fruits[]', 'orange'),
    ('user[name]', 'John'),  # 也可以传递嵌套的关联数组
    ('user[age]', '30')
]

# 发送POST请求
url = 'http://your-php-server.com/receive.php'
response = requests.post(url, data=data_with_list)  # 或 data=data_with_tuples

print(response.text)

对应的PHP接收代码 (receive.php):

<?php
// 通过$_POST直接接收数组
$fruits = $_POST['fruits']; // 这将是一个数组:['apple', 'banana', 'orange']
$user = $_POST['user'];     // 这将是一个关联数组:['name' => 'John', 'age' => '30']

echo "Fruits: ";
print_r($fruits);
echo "\nUser: ";
print_r($user);
?>

关键点:

  • requestsdata参数用于发送表单数据(application/x-www-form-urlencoded)。
  • data的值是一个列表或元组时,requests会自动处理为key[]=value的格式,这是PHP识别数组的标准方式。
  • 对于嵌套的关联数组,使用parent_key[child_key]的命名格式。

一句话总结:用字典或元组列表构造数据,并使用key[]的命名格式让PHP识别为数组。

你写成这样
python<br>"timerule[]": ['2017-03-18 15:11', '2017-03-18 15:21', '2017-03-18 15:31', '2017-03-18 15:41'] <br>

<br>"timerule[]": ['2017-03-18 15:11', '2017-03-18 15:21', '2017-03-18 15:31', '2017-03-18 15:41'] <br>

回到顶部