[英]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.