У меня возникли проблемы с запросом REST POST после того, как API, который я отправляю, опубликовал окончательный выпуск своего API. Он работал без происшествий, и мне сказали, что с новой версией сервер более строг в отношении типа «application/json». Следующая команда cli curl работает плавно:
cat json.txt|curl -v -k -u user:password -F 'exchangeInstance=@-;type=application/json' https://my.url.here
Однако мне нужно выполнить это в коде. Используя библиотеки php curl, у меня есть простой тестовый скрипт, который выглядит так:
$post = array(
"exchangeInstance" => $json_string,
"type" => "application/json",
);
$url = 'myurlhere';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "user:pass");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($post);
var_dump($result);
echo $result;
var_dump($info);
Когда я читаю документацию, Content-type в заголовке должен быть автоматически установлен на «multipart/form», если я передаю массив как CURLOPT_POSTFIELDS, а затем я устанавливаю тип для передачи элемента на «application/json» в массив.
Однако API не получал от меня POST-запросов. И я получаю от них сообщение об ошибке, которое ясно указывает на то, что они получают запрос GET. Как это может быть? Что мне не хватает?