PHP卷曲文件上传发送空上传
问题描述:
我尝试转换下面卷曲:PHP卷曲文件上传发送空上传
curl -X POST \
-H "Content-Type: image/jpeg" \
--data-binary '@myPicture.jpg' \
https://api.parse.com/1/files/pic.jpg
到PHP:
$ch = curl_init();
$data = array('myPicture.jpg' => "@myPicture.jpg");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
$headers = array();
$headers[] = "Content-Type: image/jpeg";
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch, CURLOPT_URL, 'https://api.parse.com/1/files/myPicture.jpg');
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_VERBOSE, true);
$response = curl_exec($ch);
curl_close($ch);
但我的反应是false
。这里是我从print_r(curl_getinfo($ch), true)
得到:
Array
(
[url] => https://api.parse.com/1/files/myPicture.jpg
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.28
[namelookup_time] => 0.187
[connect_time] => 0.218
[pretransfer_time] => 0.28
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
)
任何想法,为什么这不工作?谢谢!
答
的ssl_verify_result
有20
的值,这意味着,根据文档:
无法获取本地颁发者证书
的发行人证书本地抬头证书不能找到。这通常意味着可信证书列表不完整。
您可以尝试不先核实对方:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
如果成功,你必须指定最近的CA束的路径。另请参见:http://curl.haxx.se/docs/sslcerts.html
您也应该检查你要上传的文件是否是在预期的文件夹中。如果您指定CURLOPT_VERBOSE = 1
它也应警告您。
更新
检查API文档之后,服务不指望一个普通的文件上传(即"multipart/form-data"
);相反,需要原始上传。
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents('myPicture.jpg'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: image/jpeg"));
更新2 传递使用CURLOPT_POSTFIELDS
将隐含设定的请求方法来POST
和Content-Type
到application/x-www-form-urlencoded
任何东西:
这可以通过以下方式实现。当您传递一个数组时,这些值可能以@
开头,表示文件上传(这样做也应该隐式地将Content-Type
更改为multipart/form-data
)。
命令行curl
允许在几个地方的@
:
- 使用
--data-binary
指定使用--data
或--data-ascii
指定包含网址编码数据 一个文件含有原始二进制数据
- 一个文件
- 使用
--F
或--form
后者的行为与将数组传递给CURLOPT_POSTFIELDS
并使用@
前缀相同。其他两个与传递字符串的行为相同。
您是否在与php文件相同的文件夹中有图像?因为你指定@ myPicture.jpg。也请尝试使用文件的绝对路径。 –
对于jpg的内容类型,实际上应该有:IMO,'$ data = file_get_contents(“myPicture.jpg”);' – SuperSaiyan
WOOHOO THAT WORKED !!!想要添加您的答案,以便我可以检查它? – Garrett