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






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