我正在尝试测试一个rest api,以便将本地文件上传到https网址。我目前正在使用curl来做到这一点。问题是我的curl中的POST被转换为PUT(http://curl.haxx.se/docs/manpage.html)提到了相同的内容。 要从命令行进行测试,我使用以下内容:
curl -H“Content-Type:application / json”-H“授权:Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz”-H“Accept-Version:~1”-H“除了:100-continue”-H“Accept-Version:〜 1“-T”somefile.pdf“”https://abc-xyz.co/docs“
输出:
{"code":"BadMethod","message":"/docs does not support PUT"}
我的PHP代码:
$url = '"https://abc-xyz.co/docs';
$filepath = '/Users/me/Documents/somefile.pdf'; //mac path
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST" );
curl_setopt($ch, CURLOPT_HTTPHEADER,
array('Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz', 'Accept-Version: ~1', 'Except: 100-continue');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$file = "@".$filepath;
curl_setopt($ch, CURLOPT_POSTFIELDS,$file);
$response = curl_exec($ch);
if(!CURL_ERROR($ch))
{
echo"\n The output is:".$response;
}
else
{
echo "\nUpload failed ".curl_error($ch);
exit;
}
curl_close($ch);
输出:我得到解析错误。
有人可以用3件事来教育我:
谢谢, DR
答案 0 :(得分:0)
从命令行,请参阅post fileupload with curl。
从PHP,请参阅the manual
要在HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前添加@,使用完整路径。可以通过使用格式为'; type = mimetype'的类型的文件名来明确指定文件类型。此参数可以作为urlencoded字符串传递,如'para1 = val1& para2 = val2& ...',或者作为一个数组,字段名称为键,字段数据为值。如果value是数组,则Content-Type标头将设置为multipart / form-data。从PHP 5.2.0开始,如果使用@前缀将文件传递给此选项,值必须是数组。
curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath));