Ошибка ответа PHP curl - «неопознанный токен»

Я пытаюсь использовать REST API Atlassian, чтобы добавить версию в проект в Jira. Это отлично работает, если я запускаю его из git bash:

curl --request POST  --url 'https://mysite.atlassian.net/rest/api/3/version'  --header 'Authorization: Basic my_access_token' --header 'Accept: application/json'  --header 'Content-Type: application/json'  --data "{\"name\": \"19.16.0\",\"projectId\": 10011}"

Но когда я пытаюсь сделать то же самое через PHP, я получаю сообщение об ошибке. Я не очень хорошо знаком с использованием curl в PHP, поэтому я надеюсь, что проблема действительно проста.

Вот мой код:

$versionStr = $_POST['version'];
$project = $_POST['project'];
$url = "https://mysite.atlassian.net/rest/api/3/version";
$headers = array(
    "Content-Type:application/json",
    "Accept: application/json",
    "Authorization: Basic my_access_token"
);


//The data you want to send via POST
$fields = array(
    "name"      => $versionStr,
    "projectId" => $project
);

//url-ify the data for the POST
$fields_string = http_build_query($fields);

//open connection
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
//set the url, number of POST vars, POST data

curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

// these error logs display the expected data
error_log("+++headers: " . print_r($headers, 1));
error_log("+++fields count: " . count($fields));;
error_log("+++fieldString: " . $fields_string);


//execute post
$result = curl_exec($ch);
error_log("+++Curl Result: " . print_r($result, 1));
curl_close($ch);

И вот ошибка, возвращенная в $result:

{"errorMessages":["Unrecognized token 'name': was expecting 'null', 'true', 'false' or NaN\n at [Source: org.apache.catalina.connector.CoyoteInputStream@4dcb2cb6; line: 1, column: 6]"]}

Где я ошибаюсь? Я предполагаю, что это проблема с моим форматированием, а не с конечной точкой, поскольку, как указано, отправка тех же данных через необработанный вызов curl работает.

Похоже, вы создаете запрос формы POST, но API ожидает, что тело JSON будет отправлено вашим запросом CLI curl?

Jonnix 06.03.2019 23:40

@JonStirling - да, это проблема. Спасибо! Я слишком долго смотрел на это. (Не обязательно дубликат; мне не нужно знать, КАК публиковать JSON; просто нужно, чтобы кто-то указал, что я должен его использовать.)

EmmyS 06.03.2019 23:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
348
0

Другие вопросы по теме