HTTP request failed! HTTP/1.1 400 Bad Request
17,587
http_build_query()
generates a url-encoded string. However, the API requires JSON. You should be using json_encode()
instead.
Change:
$data = http_build_query($data);
To:
$data = json_encode($data);
While maybe not your only problem, this is definitely one problem that would result in an 400 Bad Request.
Author by
Vaibhav Desai
Love solving problems, building robust systems. Passionate Computer Scientist.
Updated on June 19, 2022Comments
-
Vaibhav Desai about 2 years
I am trying to create a issue in Jira .
I am able to make a GET request with a proper response, but the problem arises when i make a POST request.Here is the code.
<?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;
?>
I get the following error:
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
Could any one help me out? Thanks
P.S
I dont want to use curl as an alternative to http-streams as google app engine does not support curl.
-
Vaibhav Desai over 9 yearsThanks Jason, you were right, using json_encode() solved the problem. I have one more small question, what is the difference b/w $data=array('fields' => array ('project' => array ('key' => 'WOIS',),'summary' => 'ABC','description' => 'ABC','issuetype' => array ('name' => 'Task',),),); and $data = ['fields' => ['projects'=>['key'=>'WOIS'],'summary'=>'adfsdf','description'=>'adfefsa','issuetype'=>['name'=>'Task']]]; because if i use the second $data, it does not recognize the project field.To me both the representation look correct. Thanks.
-
Jason McCreary over 9 yearsGood. I'd ask that in a separate question so it's more clear. Welcome to StackOverflow.
-
ᴄʀᴏᴢᴇᴛ over 6 yearsthere is already an accepted answer to this question and the problem was no a typo...