我正在尝试转换以下CURL:
curl -X POST \
-H "Content-Type: image/jpeg" \
--data-binary '@myPicture.jpg' \
https://api.parse.com/1/files/pic.jpg
Run Code Online (Sandbox Code Playgroud)
到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);
Run Code Online (Sandbox Code Playgroud)
但我的回答是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
)
Run Code Online (Sandbox Code Playgroud)
关于为什么这不起作用的任何想法?谢谢!
Ja͢*_*͢ck 10
的ssl_verify_result具有值20,这意味着,根据本文档:
无法获得本地发行人证书
无法找到本地查找证书的颁发者证书.这通常意味着可信证书列表不完整.
您可以先尝试不先验证对等方:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Run Code Online (Sandbox Code Playgroud)
如果可行,则必须指定最近的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"));
Run Code Online (Sandbox Code Playgroud)
更新2
使用递东西CURLOPT_POSTFIELDS将隐式请求方法设置为POST与Content-Type对application/x-www-form-urlencoded.传递数组时,值可能从@指示文件上载开始(这样做也应隐式更改Content-Type为multipart/form-data).
命令行curl允许@在几个地方:
--data-binary指定包含原始二进制数据的文件--data或--data-ascii指定包含url编码数据的文件--F或--form后者的行为与将数组传递给前缀CURLOPT_POSTFIELDS和使用@前缀相同.其他两个行为与传递字符串相同.
| 归档时间: |
|
| 查看次数: |
5997 次 |
| 最近记录: |