最近我尝试传递多个数据时遇到了一个问题
问题:
API使用POST发送参数 参数之一被设计为能够接受具有相同名称/键的多个值。 在GET中可以这样表示:/ api?name = James&name = Peter&name = Richard&… 在此示例中,我们为“ name”发送了3个值(James,Peter和Richard),这是完全有效的,因为API期望它并且将按应有的方式处理该值。 现在问题出在POST。在PHP cURL中,像这样发送POST参数:
$data = array("name" => "James", "email" => "james@someone.com");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
现在我们都知道数组中的内容,我们只设置一次密钥。因此,在这种情况下,无法发送3个不同的值作为“名称”。那么,我们应该如何通过POST发送?name = James&name = Peter&name = Richard,但这次不是通过PHP,而是以HTTP curl格式发送?
所以我该如何在HTTP发布中发送多个数据,例如
{
"funcrr":"create_insert_new_delivery",
"data":{
"name":"James",
"email":"james@someone.com",
//MORE OF LIKE AN ARRAY BUT IN HTTP FORM
"product_name":"Pear",
"product_weight":"30",
"product_name":"Rice",
"product_weight":"60",
"product_name":"Yoghury",
"product_weight":"100",
}
}
答案 0 :(得分:2)
这是我想到的使用重复的命名键构建请求的唯一方法...
// Data Source
$data = array(
array('name'=>'james','email'=>'james@someone.com'),
array('name'=>'john','email'=>'john@someone.com'),
array('name'=>'joe','email'=>'joe@someone.com'),
);
// Request String Building
$postFields = implode( '&', array_map( 'http_build_query', $data ) );
// curl assignment
curl_setopt( $ch, CURLOPT_POSTFIELDS, $postFields );
这会产生...
name = james&email = james%40someone.com&name = john&email = john%40someone.com&name = joe&email = joe%40someone.com
http_build_query()
应用于每个“行”数据,然后通过&
implode()
连接在一起