1

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);
?>

このエラーの可能な解決策は何ですか?

4

2 に答える 2

1

ボリスラフの答えはあなたの問題の「症状」に向けられていますが、OPが経験している両方のcURLエラーに対する簡単な答えは、定数であるという事実です:

CURL_HEADER間違って入力されました...次のようになります。

CURLOPT_HEADER.

すべての cURL オプション定数には、プレフィックスとしてCURLOPT-が付いています。PHP マニュアル - cURL 転送オプションを参照し、下にスクロールして定数を探します。

エラー トレイルをもう少し詳しく説明します。

最初のエラー:

注意: 未定義の定数 CURL_HEADER の使用 - 'CURL_HEADER' を想定

CURL_HEADERは単に入力ミスのため、 PHP が を認識しないことを意味します。

これは関数にドミノ効果をもたらしcurl_setopt_array()ます。上記の定数のタイプ/スペルが間違っているため、この関数全体が失敗し、PHP のcurl_setopt_array()に関するマニュアルに従って false を返しました。 "

警告: curl_setopt_array(): 配列キーは CURLOPT 定数または同等の整数値でなければなりません

その関数がどのように false を返したかを見ると、cURL オプションが設定されていませんでした。しかし、cURL の HTTP リクエストに必要な情報が入力されることなく、スクリプトは引き続き実行されます...そして BOOM!

HTTP ステータス 405 - メソッドは許可されていません。指定された HTTP メソッドは、要求されたリソースに対して許可されていません。

HTTP リクエストが要件を満たしていないため、JIRA API は 405 レスポンスをスローします。

すべては、定数から 3 文字が欠落していたためです: "CURL OPT _HEADER"

これがプログラミングが楽しい理由です:D

于 2015-09-24T05:36:52.560 に答える
0

注意: 未定義の定数 CURL_HEADER の使用 - 'CURL_HEADER' を想定

PHP が CURL_HEADER を定数として認識しないことを意味します。もしかしてバージョンが古い?または、タイプミスしたか、存在しません。:

警告: curl_setopt_array(): 配列キーは CURLOPT 定数または同等の整数値でなければなりません

渡すパラメータの構造が間違っていることと、次のことを意味しますcurl_set_opt($param1, $param2)

HTTP ステータス 405 ....何とか、何とか

The server is returned HTTP 405 Method Not Allowedという意味です。

さらに、純粋な cUrl は多くの頭痛の種となり、JIRA に接続するフルスタック アプリケーションを開発している場合は困難になります。私は個人的に、(すべての) JIRA REST エンドポイントに cUrl で接続し、次にcUrlベースのライブラリである Guzzle で接続するフル機能のアプリケーションを作成しました。私を信じてください-開発と(さらに重要なことに)保守がはるかに簡単になります。

したがって、アプローチを変更するオプションがある場合は、今すぐ 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 のドキュメントを確認してください。

乾杯!

于 2013-09-25T12:43:17.227 に答える