【问题标题】:How to POST PDF content as application/pdf using cURL [duplicate]如何使用 cURL 将 PDF 内容发布为应用程序/pdf [重复]
【发布时间】:2016-05-15 18:06:32
【问题描述】:

我是 cURL 的新手,我通常使用 .NET 或 JQuery 来发布到 Web API,但我需要使用现有的 PHP 实现来发布具有 content-type: application/pdf 的 PDF 到 Web API .

现有实现仅 POST 和接收 JSON 数据,因此非常简单。当我尝试将代码更改为将应用程序/pdf 内容发布到另一个端点时,我不断收到以下错误:

文件类型错误。可接受的内容类型为 application/pdf、text/richtext、text/plain、image/jpeg。

这是我正在使用的代码:

$curl = curl_init($url);  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($curl, CURLOPT_FAILONERROR, false);  
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/pdf'),   
                                           $auth_header));   
curl_setopt($curl, CURLOPT_POST, 1);                                         
curl_setopt($curl, CURLOPT_POSTFIELDS, file_get_contents('C:\MyFile.pdf'));  
$response = curl_exec($curl);  
if (!$response) {  
  $response = curl_error($curl);  
}  
curl_close($curl);  

我已检查该 PDF 是否为有效 PDF,甚至尝试了其他几个 PDF。我还设置了 cURL 选项来编写错误日志,这表明 cURL 正在将内容类型设置为标题中的 application/pdf。

我是否使用了错误的函数从文件中获取 PDF 内容?还是我设置的正文内容错误?我正在调用的 API 有说明 PDF 内容应该发布在正文中的文档,没有提到将其作为参数发布。它还说要在标题中设置 content-type: application/pdf,我已经这样做了。但它没有说其他任何东西,但我认为这应该是一个简单的调用,但也许我对 cURL 的了解不够......

【问题讨论】:

    标签: php pdf curl


    【解决方案1】:

    假设您使用的是 PHP 5.5+,您需要使用 CURLfile 来上传文件:

    $file = new CURLFile('C:\MyFile.pdf','application/pdf','MyFile');
    // your CURL here
    curl_setopt($curl, CURLOPT_POSTFIELDS, ['pdf' => $file]);
    ...
    

    如果您使用的是旧版本,也许您应该尝试在文件名前添加“@”,如建议的here

    curl_setopt($curl, CURLOPT_POSTFIELDS, array('name' => 'pdf', 'file' => '@C:\MyFile.pdf'); 
    

    【讨论】:

    • 成功了!我正在使用 PHP 5.5,但我很高兴在旧版本中发布这种方法。我可能需要将它部署到几台机器上,其中一些机器有旧版本的 PHP,所以现在我准备好了!非常感谢!
    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 2011-08-13
    • 2010-11-16
    • 1970-01-01
    • 2023-01-17
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多