0

我正在尝试测试一个用于将本地文件上传到 https url 的 rest api。我目前正在使用 curl 来做到这一点。问题是我在 curl 中的 POST 被转换为 PUT (http://curl.haxx.se/docs/manpage.html) 也提到了同样的问题。要从命令行进行测试,我使用以下内容:

curl -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXYYYYYzzzzzz" -H "Accept-Version: ~1" -H "Except: 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);

输出:我得到解析错误。

有人可以用三件事教育我:

  1. 我可以使用 curl 为 https 进行 POST 吗?如果是,如何?如果没有,我的方法应该是什么?
  2. 如何在我的 php 中传递文件路径名?我也试过 "@".$filepath 但它仍然不喜欢它。
  3. 如果我想将文件上传类型限制为 pdf,我应该使用 mime 类型吗?(申请/pdf????)

谢谢,博士

4

1 回答 1

0

在命令行中,使用 curl 查看 post fileupload

从 PHP,请参阅手册

在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前加上 @ 并使用完整路径。文件类型可以通过使用格式为“;type=mimetype”的文件名来明确指定。此参数可以作为 urlencoded 字符串(如 'para1=val1¶2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。

curl_setopt($ch, CURLOPT_POSTFIELDS,array('someuploadname'=> "@".$filepath));
于 2012-06-14T23:20:08.077 回答