受到using CURL in PHP to add an issue in JIRA via REST API的启发,我试图在JIRA中为一个问题添加评论,但我收到了405错误
错误: 注意:使用未定义的常量CURL_HEADER - 假设为'CURL_HEADER' 警告:curl_setopt_array():数组键必须是CURLOPT常量或等效的整数值 HTTP状态405 - 不允许的方法 类型状态报告 消息方法不允许 description对于请求的资源,不允许使用指定的HTTP方法(Method Not Allowed)。
我的代码:
<?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);
?>
这个错误的可能解决方案是什么?
答案 0 :(得分:1)
尽管Borislav的回答针对的是你的问题的“症状”,但是OP正在经历的两个cURL错误的简单回答是这个常数:
CURL_HEADER
输入错误...应该是:
CURLOPT_HEADER
。
所有cURL选项常量都有 CURLOPT - 作为前缀。请参阅PHP manual - cURL Transfer options并向下滚动查看常量。
进一步解释错误追踪:
第一个错误:
注意:使用未定义的常量CURL_HEADER - 假定为'CURL_HEADER'
意味着PHP无法识别CURL_HEADER
,只是因为这是一个错字。
这对curl_setopt_array()
函数有多米诺骨牌效应。因为上面的常量输入错误/拼写错误,所以整个函数失败并返回false,如 curl_setopt_array()上的PHP手册:“如果无法成功设置选项,则立即返回FALSE返回,忽略选项数组“
警告:curl_setopt_array():数组键必须是CURLOPT常量或等效整数值
看到该函数如何返回false,没有设置cURL选项。但是你的脚本继续执行,没有所需的信息进入cURL的HTTP请求...和BOOM!
HTTP状态405 - 不允许的方法;请求的资源不允许使用指定的HTTP方法。
JIRA API会向您发出405响应,因为HTTP请求不符合其要求。
所有因为常数中缺少3个字母:“CURL OPT _HEADER”
这就是为什么编程很有趣:D
答案 1 :(得分:0)
在:
注意:使用未定义的常量CURL_HEADER - 假定为'CURL_HEADER'
表示PHP无法将CURL_HEADER识别为常量。也许你的版本已经老了?或者你输入错误,或者它不存在。的:
警告:curl_setopt_array():数组键必须是CURLOPT常量或等效整数值
表示您传递给curl_set_opt($param1, $param2)
的参数的结构错误,并且:
HTTP状态405 ...... Blah,Blah
意味着所说的内容:服务器正在返回HTTP 405 Method Not Allowed。
此外,纯cUrl会引起很多麻烦,如果你正在开发一个连接到JIRA的全栈应用程序,那将很难。 我个人完成了一个功能齐全的应用程序,它使用cUrl连接到(所有)JIRA REST端点,然后使用Guzzle连接到基于cUrl的库。 相信我 - 开发和(更重要的)维护会更容易。
因此,如果您可以选择更改方法,我建议您立即切换到Guzzle。 ;)
如果您正在使用composer(您应该这样做;)),请将以下内容添加到项目根目录中的composer.json
文件中:
{
"require": {
"guzzle/guzzle": "~3.1.1"
}
}
然后:
composer.phar install
PEAR安装也是一个选项:
pear -D auto_discover=1 install guzzlephp.org/pear/guzzle
当然,您也可以include the guzzle.phar
。
查看Guzzle docs以获取更多信息。
干杯!