在HTTP cURL POST中发送具有相同名称/键的多个值

时间:2018-07-04 02:00:27

标签: php curl post

最近我尝试传递多个数据时遇到了一个问题

问题:

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",
   }
}

1 个答案:

答案 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()连接在一起