簡體   English   中英

在php中使用cURL在JIRA中為問題添加評論

[英]Using cURL in php to add a comment to an issue in JIRA

PHP中使用CURL通過REST API在JIRA中添加問題的啟發,我試圖在JIRA中為問題添加評論,但出現405錯誤

錯誤: 注意:使用未定義的常量CURL_HEADER-假定為'CURL_HEADER'警告:curl_setopt_array():數組鍵必須為CURLOPT常數或等效的整數值HTTP狀態405-不允許的方法類型狀態報告消息方法不允許的說明指定的HTTP方法是不允許用於請求的資源(不允許使用方法)。

我的代碼:

<?php  
$handle=curl_init();
$headers = array(
    'Accept: application/json',
    'Content-Type: application/json'
);

$data = <<<JSON
{
    "body": "Please Ignore. Test Comment"
}
JSON;
curl_setopt_array(
    $handle,
    array(
        CURLOPT_URL=>'https://path.to.Jira/rest/api/2/issue/issue-123',
        CURLOPT_POST=>true,
        //CURLOPT_HTTPGET =>true,
        CURLOPT_VERBOSE=>1,
        CURLOPT_POSTFIELDS=>$data,
        CURLOPT_SSL_VERIFYHOST=> 0,
        CURLOPT_SSL_VERIFYPEER=> 0,
        CURLOPT_RETURNTRANSFER=>true,
        CURL_HEADER=>false,
        CURLOPT_HTTPHEADER=> $headers,
        CURLOPT_USERPWD=>"username:password"
        //CURLOPT_CUSTOMREQUEST=>"POST"
    )
);
$result=curl_exec($handle);
$ch_error = curl_error($handle);

if ($ch_error) {
    echo "cURL Error: $ch_error";
} else {
    echo $result;
}

curl_close($handle);
?>

該錯誤的可能解決方法是什么?

盡管Borislav的答案是針對您問題的“症狀”,但OP遇到的兩個cURL錯誤的簡單答案是以下事實:

CURL_HEADER輸入錯誤...應該是:

CURLOPT_HEADER

所有cURL選項常量都以CURLOPT-作為前綴。 請參閱PHP手冊-cURL傳輸選項,並向下滾動以獲得常量。

進一步解釋錯誤線索:

第一個錯誤:

注意:使用未定義的常量CURL_HEADER-假定為'CURL_HEADER'

意味着PHP無法識別CURL_HEADER ,僅僅是因為它是一個錯字

這對curl_setopt_array()函數具有多米諾效應。 因為上面的常數輸入/拼寫錯誤,這整個函數失敗和curl_setopt_array返回false,按照PHP手冊

警告:curl_setopt_array():數組鍵必須為CURLOPT常數或等效的整數值

看到該函數如何返回false,因此未設置cURL選項。 但是您的腳本將繼續執行,而所需信息不會進入cURL的HTTP請求中……還有BOOM!

HTTP狀態405-不允許使用的方法; 所請求的資源不允許使用指定的HTTP方法。

JIRA API向您拋出405響應,因為HTTP請求不符合其要求。

這是因為常量中缺少3個字母:“ CURL OPT _HEADER”

這就是為什么編程很有趣的原因:D

的:

注意:使用未定義的常量CURL_HEADER-假定為'CURL_HEADER'

表示PHP無法將CURL_HEADER識別為常量。 也許您的版本舊了? 或者您輸錯了它,或者它不存在。 的:

警告:curl_setopt_array():數組鍵必須為CURLOPT常數或等效的整數值

表示傳遞給curl_set_opt($param1, $param2)的參數的結構錯誤curl_set_opt($param1, $param2)並且:

HTTP狀態405 .... Blah,Blah

表示的含義恰恰是:服務器返回HTTP 405 Method Not Allowed

此外,純cUrl會讓您頭疼不已,如果您正在開發連接到JIRA的全棧應用程序,將會很困難。 我親自完成了一個功能齊全的應用程序,該應用程序先使用cUrl,然后使用Guzzle(這是基於cUrl的庫)連接到(所有)JIRA REST端點。 相信我-它會更容易開發和(更重要的是)維護。

因此,如果您可以更改方法,我建議您現在切換到Guzzle。 ;)

如果您正在使用composer (您應該這樣做;)),則將以下內容添加到項目根目錄中的composer.json文件中:

{
    "require": {
        "guzzle/guzzle": "~3.1.1"
    }
}

然后:

composer.phar install

也可以選擇安裝PEAR:

pear -D auto_discover=1 install guzzlephp.org/pear/guzzle

當然,您也可以只包含guzzle.phar

查看Guzzle文檔 ,了解更多信息。

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM