Ошибка при попытке отправить файл в вызове CURL POST - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь позвонить из моего приложения Laravel в API Bullhorn, чтобы преобразовать документ в 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 /смешанный поток, заголовок типа контента является application / x-www-form-urlencoded

Когда я пытаюсь установить Content-Type явно:

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

Я все еще получаю 500ошибка, немного отличающаяся:

Загружен неверный файл: запрос был отклонен, так как не было найдено многокомпонентной границы

Не думаю, что это проблема с API Bullhornпотому что выполнение следующего вызова через командную строку работает нормально:

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

Я предполагаю, что по какой-то причине файл не присоединяется в моем вызове PHP, но я не могу понять, почему.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Если у меня когда-либо возникают странные проблемы с запросами, я всегда помещаю запрос в почтальон и проверяю его там, так как он собирает большинство заголовков и опций для вас, а затем просто нажимаю кнопку кода нав правом верхнем углу для генерации кода на любом языке, который вы хотите.

Для вашего случая вы можете datadump (dd) из вашей переменной $ data и скопировать ее в одно из полей почтальона, а затем установить url, а также тип запроса.затем запустите его и посмотрите, что вы получите.

Просто предложение о том, как отладить такую ​​проблему, надеюсь, это поможет!удачи!

0 голосов
/ 21 июня 2019

content-type: multipart/form-data использует параметр границы для инкапсуляции, вы можете передать граничное значение в виде строки

'Content-Type: multipart/form-data; boundary=---------------------------7da24f2e50046'

Граница - это строка "-", за которой следует случайныйстрока.

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...