Php 使用CURLOPT_POSTFIELDS时的数组2字符串转换
我有以下代码:Php 使用CURLOPT_POSTFIELDS时的数组2字符串转换,php,arrays,curl,libcurl,notice,Php,Arrays,Curl,Libcurl,Notice,我有以下代码: // $postfields = array(); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); My$postfields变量是一个参数数组。我注意到了数组到字符串的转换。它的工作方式是 我可以使用http\u build\u query()函数取消通知,但是我使用@path\u to\u file包含post文件。和http\u build\u query()中断文件包含的内容 我想知道是否有更“合适”的方法来做到这一
// $postfields = array();
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
My$postfields
变量是一个参数数组。我注意到了数组到字符串的转换。它的工作方式是
我可以使用http\u build\u query()
函数取消通知,但是我使用@path\u to\u file
包含post文件。和http\u build\u query()
中断文件包含的内容
我想知道是否有更“合适”的方法来做到这一点。不生成通知。是
$postfields
数组本身的一些值吗?这很可能是引起通知的原因curl_setops
希望它的第三个参数是一个数组,其键和值是字符串,如中所述,尽管可能不太清楚:
此参数可以作为urlencoded字符串(如“para1=val1¶2=val2&…”)传递,也可以作为以字段名为键、字段数据为值的数组传递
在这段引文中,关键点是para1/2和val1/2是字符串,如果需要,可以将它们作为数组提供,其中键是para1和para2,值是val1和val2
有两种方法可以消除通知
第一个是使用http\u build\u query()
并将您对@filepath的使用替换为。不幸的是,这只有在使用PHP5.5或更高版本时才可能实现。手册的页面有一个非常清晰和简单的页面
如果使用CURLFiles不是您的选择,那么第二种方法是json\u encode()
您的$postfields
数组本身的值。这并不优雅,它要求您在另一端解码JSON。j11e的答案无法用于发送多维数组
试试这个递归函数
使用Laravel对我有效的一件事是在请求头中使用标记“Content-Type:application/json”,并发送json编码的数据,如下所示:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
在接收请求中的参数的函数中,我不需要使用json解码函数,我访问参数就像
$request->something
实际上,这个数组的3个值就是数组本身。。。我没有使用它们,因此这些可能无法正确导出。我不认为那些可能是内部数组。使用http\u build\u query
和CURLFiles
不起作用。CURLFiles
将被转换成数组,并作为常规的$\u POST
数据显示出来。这就是我所需要的。为了在curl request中使用etc,这是正确的答案。谢谢你
curl_setopt($ch, CURLOPT_POSTFIELDS, build_post_fields($postfields));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));