在 PHP 中使用 curl 发送复杂数据
Posted
技术标签:
【中文标题】在 PHP 中使用 curl 发送复杂数据【英文标题】:Send a complex data using curl in PHP 【发布时间】:2021-04-30 08:54:50 【问题描述】:我搜索了很多,找到了很多与此相关的问题和论坛,但是这个是一个具有挑战性的。
我正在尝试通过curl
发布一个复杂的数组。它必须是form-data
,而数组中的第一个值是JSON
类型。
array 的另外两个值是两个已上传并准备发送的图像。
我尝试在Postman
中运行它,并且运行良好。我使用了Postman
生成的php
代码,但它不起作用。似乎邮递员正在处理它的一些技巧而不向我们透露它们。
无论如何,我发布一张邮递员图片来说明我的意思:
如您所见,我在form-data
选项卡中发送数据,我的第一个值(param1
)是JSON
和content-type
application/json
,第二个和第三个值是上传的图像Postman
.
这在Postman
中工作得很好。
问题是,如果我在标头中设置Content-Type:multipart/form-data
,目标服务器会抛出一个错误,指出content-type
必须是JSON
。
如果我在标头中设置Content-Type:application/json
,目标服务器会说内容必须是 Multipart 类型。
不知何故,我需要设置两种内容类型。主要的 form-data
和 param1 的 JSON
。
我也粘贴了 Postman 代码,这可能是你们帮助编写代码的一个好的开始。
邮递员代码:
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://xxxxx.com/xxxx/xxx/xxxx',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('param1' => '
"AgentId":"1414",
"ContractId":36529,
"Files":[
"FileName":"car_card_front_image.png",
"FileTypeId":2
,
"FileName":"car_card_back_image.png",
"FileTypeId":2
]
','param2'=> new CURLFILE('/C:/images/icons/car_card_back_image.png'),'param3'=> new CURLFILE('/C:/images/icons/car_card_front_image.png')),
CURLOPT_HTTPHEADER => array(
'authenticationToken: xxxx-xxx-xx-xxxxxxxx'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
邮递员生成的 PHP 代码,不工作。原因之一可能是其中没有提到内容类型。
我尝试修改代码,在标题和参数中添加内容类型,似乎没有任何效果。
如果Postman
能做到,我们应该也能做到吧?
继续,尽可能多地进行更改,或者提出任何你想到的建议,我会全部测试。
各位...
【问题讨论】:
这能回答你的问题吗? ***.com/questions/3433542/curl-php-send-image 很遗憾,不再支持禁用安全上传 【参考方案1】:我可以推荐ixudrra/curl 库吗?
这会让你的生活更轻松......
$response = Curl::to('http://example.org')
->withData( array( 'Foo' => 'Bar' ) )
->withFile( 'image_1', '/path/to/dir/image1.png', 'image/png', 'imageName1.png' )
->withFile( 'image_2', '/path/to/dir/image2.png', 'image/png', 'imageName2.png' )
->post();
【讨论】:
我一定会给它一个敲门,让你知道提前谢谢以上是关于在 PHP 中使用 curl 发送复杂数据的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 cURL/PHP 使用 PUT 方法将 JSON 数据发送到 API
php 中使用cURL发送get/post请求,上传图片,批处理