HTTP 请求失败!HTTP/1.1 400 错误请求

Vai*_*sai 5 php google-app-engine jira http-streaming jira-rest-api

我正在尝试在 Jira 中创建一个问题。

我能够以正确的响应发出 GET 请求,但是当我发出 POST 请求时出现问题。这是代码。

<?php

$userName ='xxxxxxxxxxxxxxxx';
$password ='xxxxxxxxxxxx';

$data = ['fields' => ['projects'=>['key'=>'ABC'],'summary'=>'abc','description'=>'abc','issuetype'=>['name'=>'Task']]];

$data = http_build_query($data);
$context = 
     array("http"=>
        array(
            "method" => "POST",
                "header" => "Authorization: Basic " . base64_encode($userName.':'.$password) . "\r\n".
                'Accept: application/json'."\r\n".
                "Content-Length: ".strlen($data)."\r\n".
                    'Content-Type: application/json'."\r\n",
            'content' => $data,
            'verify_peer'=>false,
            'verify_peer_name'=>false,
            )
            );
$context = stream_context_create($context);
$result = file_get_contents("https://xxxxx.atlassian.net/rest/api/2/issue/", false, $context);
echo "The result is ", $result;
Run Code Online (Sandbox Code Playgroud)

?>

我收到以下错误:

Warning:file_get_contents(https://xxxxx.atlassian.net/rest/api/2/issue/):
failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in
/var/www/html/test/new.php on line 27
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?谢谢

聚苯乙烯

我不想使用 curl 作为 http-streams 的替代品,因为谷歌应用引擎不支持 curl。

Jas*_*ary 6

http_build_query()生成一个 url 编码的字符串。但是,API 需要 JSON。你应该json_encode()改用。

改变:

$data = http_build_query($data);
Run Code Online (Sandbox Code Playgroud)

到:

$data = json_encode($data);
Run Code Online (Sandbox Code Playgroud)

虽然可能不是您唯一的问题,但这绝对是一个会导致400 Bad Request 的问题