首页 > 解决方案 > 尝试在 CURL POST 调用中发送文件时出错

问题描述

我正在尝试从我的 Laravel 应用程序调用 Bullhorn API 以将文档转换为 HTML,但看起来该文件没有附加到调用中。下面是我的代码:

$data = curl_file_create("full/path/to/file.docx", 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'testcv');

$ch = curl_init();

curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

$response = curl_exec($ch);

但是我收到以下 500 错误:

已上传错误文件:请求不包含 multipart/form-data 或 multipart/mixed 流,内容类型标头为 application/x-www-form-urlencoded

当我尝试Content-Type明确设置时:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Content-Type: multipart/form-data'
));

我仍然收到 500 错误,只是略有不同:

已上传错误文件:请求被拒绝,因为未找到多部分边界

我不认为 Bullhorn API 有问题,因为通过命令行执行以下调用可以正常工作:

curl -X POST "https://restXXX.bullhornstaffing.com/rest-services/{corptoken}/resume/convertToHtml?format=docx&BhRestToken={bhRestToken}" -F "file=@full\path\to\file.docx"

我假设由于某种原因该文件没有附加到我的 PHP 调用中,但我不知道为什么。

任何帮助将不胜感激。

标签: phplaravelcurl

解决方案


如果我对请求有任何奇怪的问题,我总是将请求放入邮递员并在那里进行测试,因为它会为您编译大部分标题和选项,然后只需点击右上角的代码按钮以生成任何语言的代码想。

对于您的情况,您可以对 $data 变量进行数据转储(dd)并将其复制到邮递员字段之一,然后设置 url 以及请求类型,然后运行它并查看您返回的内容。

只是关于如何调试此类问题的建议,希望对您有所帮助!祝你好运!


推荐阅读