curl 使用PHP调用Azure发布创建

chhqkbe1  于 2022-11-13  发布在  PHP
关注(0)|答案(1)|浏览(161)

我尝试使用纯PHP调用Azure DevOps API REST来创建发布管道。主体所需的json与POSTMAN一起工作,但PHP返回此错误:
[内部异常] =〉[消息] =〉VS402903:指定的值无法转换为ReleaseStartMetadata类型。请确保该值可以转换为ReleaseStartMetadata类型,然后重试。[类型名称] =〉Microsoft.VisualStudio.服务.ReleaseManagement.数据.异常。无效请求异常,Microsoft. VisualStudio.服务. ReleaseManagement2.数据[类型键] =〉无效请求异常[错误代码] =〉0 [事件ID] =〉3000)
这没有任何意义,但我认为有一些关于信息的返回,而不是通过身体发送的信息。
下面是我的代码:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$pat='hidden';

$url = 'https://vsrm.dev.azure.com/org-id/workspace-name/_apis/release/releases?api-version=6.0';

$body = '{
  "definitionId": 1,
  "description": "test",
  "name": "test",
  "isDraft": false,
  "reason": "manual"
}';

$data_json = json_encode($body);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8; api-version=6.0','Authorization: Basic '.$pat));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response  = curl_exec($ch);
$data = json_decode($response, true);
print_r ($data);
curl_close($ch);
?>
mf98qq94

mf98qq941#

我找到了答案,错误是因为我通过主体发送的json有一些转义字符\n\等。
有了这个,我已经清理了它,并把它放在$data_json = json_encode($body)下面;

$body_formatted=rtrim(ltrim(str_replace('\\', '', str_replace('\n', '', $data_json)), '"'), '"');

在后置选项curl_setopt($ch, CURLOPT_POSTFIELDS,$body_formatted);上使用body_formatted
希望对大家都有帮助。

相关问题