2015-02-10 235 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

相關問題