2015-02-10 236 views
2

我想在Jira中创建一个问题。HTTP请求失败! HTTP/1.1 400错误请求

我能够做出正确的响应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; 

>

我得到以下错误:

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 

可以在任何一个可以帮助我吗?由于

P.S

我不想使用卷曲,以替代HTTP流为谷歌应用程序引擎不支持卷曲。

+0

您要发送的查询字符串,但声称发送JSON。这可能是你的第一个问题。 – 2015-02-10 16:06:32

+0

@JasonMcCreary这里是上面使用curl的例子,https://developer.atlassian.com/jiradev/api-reference/jira-rest-apis 你能建议什么应该是post url吗? – digiVader 2015-02-10 16:27:09

回答

2

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

变化:

$data = http_build_query($data); 

要:

$data = json_encode($data); 

虽然也许不是你唯一的问题,这肯定是一个问题,这将导致400错误的请求

+0

谢谢杰森,你是对的,使用json_encode()解决了这个问题。 我还有一个小问题, 有什么区别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 '=> [' 名称 '=>' 任务']]]; 因为如果我使用第二个$数据,它不能识别项目字段。对我来说这两个表示看起来是正确的。 谢谢。 – digiVader 2015-02-10 17:25:26

+0

好。我会问一个单独的问题,所以更清楚。欢迎来到StackOverflow。 – 2015-02-10 19:20:21

0

你能在你的代码中输入一个错字吗?

$data=array('fields' => array ('project' => array ('key' => 'WOIS',),'summary' => 'ABC','description' => 'ABC','issuetype' => array ('name' => 'Task',),),); 

VS

$data = ['fields' => ['projects'=>['key'=>'WOIS'],'summary'=>'adfsdf','descriptio‌​n'=>'adfefsa','issue‌​type'=>['name'=>'Tas‌​k']]]; 

的第一行说project而第二行说projects

+0

已经有一个公认的答案来解决这个问题,问题是没有错字... – 2017-11-15 13:55:41

相关问题