Я пытаюсь отправить составной запрос к API, который содержит как изображение, так и массив с подробными сведениями об этом изображении. Этот запрос работает через Postman, но реализация его с использованием CURL в PHP оказывается сложной.
Заголовки довольно простые - они просто содержат $ auth_token, полученный ранее из других вызовов API.
$headers = array('Content-Type: multipart/form-data', 'Authorization-token: ' . $auth_token));
Фактическое тело данных формы выглядит следующим образом: CurlFile создается следующим образом, а массив с информацией о файле
$fields = array(
"data" => new CurlFile('C://images/15.jpg', 'image/jpg', '15.jpg'),
"entityFile" => array(
"fileTypeID"=> "server generated id",
"fileSize"=> 23453,
"entityID"=> "another server generated id",
"fileDateUtc"=> "2018-02-26T00:00:00",
"fileName"=> "15",
"fileExtension"=> "jpg"
)
);
Наконец, я установил параметры для отправки данных
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
Я также попытался прикрепить изображение как строку в кодировке base64, но изображение на сервере не изменилось.
Мой вопрос в том, есть ли что-то явно неправильное с моим массивом $ fields, которое могло бы вызвать его сбой? Я подозреваю, что может быть проблема с самим файлом, но это трудно определить, поскольку фактическая возвращенная ошибка ...
The requested URL returned error: 400 Bad Request
Спасибо
Спасибо - если я error_log (var_export ($ result, true)); Я получаю эту ошибку. Есть ли еще что-нибудь, что я могу попытаться получить больше информации?
if (curl_error ($ c)) {echo 'error:'. curl_error ($ c); } Это даст вам ошибку curl. Но также проверьте свои инструменты разработчика (F12), иногда браузер выводит сообщения об ошибках вверху страницы.
curl_error ($ c) и инструменты разработчика (Chrome) дают ту же ошибку
какой API вы используете? есть ошибка с информацией, которую вы отправляете API, из-за которой вы получаете 400.
Используемый API в основном неизвестен публике, и я, к сожалению, не уполномочен размещать его здесь.
В плохом запросе должно быть больше информации, обычно они сообщают вам причину. внимательно проверьте свой ответ