PHP上的-F Curl选项

I'm trying to run CURL command in PHP to upload image to an API the code mentioned in the doc was:

curl -u 15:tokenkeyiskmzwa8awaa https://api.bukalapak.com/v2/images.json -F file=@product-image.png -X POST

Have tried using mac terminal running this curl command (with proper username and password) and successfully got the result as it is uploading, however was not successfully doing it on PHP. My php code is :

<?php

$data = array('file'=> '@'.$imagePath ); 

// this is an absolute path, give something like D://folder/path/on/my/webserver/image.jpg

$user = '1234567';

$pass = '123456';

$ch = curl_init();

$curl_options[CURLOPT_URL]  = 'https://api.bukalapak.com/v2/images.json';

$curl_options[CURLOPT_CAINFO] = storage_path('app/cacert.pem');

$curl_options[CURLOPT_HEADER] = "Content-Type: application/x-www-form-urlencoded";

$curl_options[CURLOPT_POST] = 1;

$curl_options[CURLOPT_USERPWD] = $user.':'.$pass;

$curl_options[CURLOPT_POSTFIELDS] = http_build_query($data);

curl_setopt_array($ch, $curl_options);

$content = curl_exec($->ch);`

Curl version : 7.47.1 PHP version : 5.6.21 any feedback is very appreciated.

dsgnsdjk26586
dsgnsdjk26586 HTTP状态代码500表示“内部服务器错误”,而不是“禁止”;-)
3 年多之前 回复
drnx3715
drnx3715 错误消息是500Forbidden,我认为这是因为我使用的CURLOPT_POSTFIELDS相当于卷曲上的-d。但问题解决了@swapgs指出的使用curl_file_create在curl函数上实现-F的问题。谢谢你的回复。
3 年多之前 回复
dongshan1959
dongshan1959 有没有错误消息?代码如何以及在何处失败?
3 年多之前 回复

1个回答

You did not posted the complete script: $curl_options is undefined, storage_path is related to Laravel but there is no import, etc. Something like the following script should work as you expect (I didn't tested it since I don't have an account on this service):

<?php

$imagePath = 'path/to/your/image.ext';
$user = 'youruser';
$pass = 'yourpass';

$file = curl_file_create($imagePath);
$body = ['file' => $file];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.bukalapak.com/v2/images.json');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, $user.':'.$pass);
curl_setopt($ch, CURLOPT_CAINFO, 'path/to/cacert.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
$result = curl_exec($ch);
curl_close($ch);
dongmouhao7438
dongmouhao7438 实际上,CURLOPT_POSTFIELDS等效于-F参数。 curl_file_create等同于@ somefile.ext。
接近 3 年之前 回复
dongmi4035
dongmi4035 嘿谢谢你! 这就像魔术一样。 真的很帮助我。 花了很多时间试图实现这个-F而没有运气。 再次感谢 ! 上帝祝福你 ! :)
3 年多之前 回复
dongxiaowei_1234
dongxiaowei_1234 我编辑了我的答案来修复POST参数名称(s / file_contents / file /)。
3 年多之前 回复
dongzhao1865
dongzhao1865 调用curl_file_create()的行等效于-F参数。
3 年多之前 回复
douya1061
douya1061 谢谢你的回复,是的我很抱歉没有发布完整的脚本,但我向你保证PHP脚本没有任何错误,curl工作正常。 但是,如果我运行PHP脚本,我从服务器得到500服务器错误,而如果我从mac终端使用curl命令它工作正常。 我认为CURLOPT_POSTFIELDS被翻译为-d,这不是服务器想要的。 服务器需要-F选项。 那么任何想法如何在PHP中实现-F选项来卷曲函数?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐