56

次のようなGETリクエストにcURLを使用しようとしています:

function connect($id_user){
    $ch = curl_init();
    $headers = array(
    'Accept: application/json',
    'Content-Type: application/json',

    );
    curl_setopt($ch, CURLOPT_URL, $this->service_url.'user/'.$id_user);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $body = '{}';

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Timeout in seconds
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    $authToken = curl_exec($ch);

    return $authToken;
}

ご覧のとおり、 $body をリクエストの body として渡したいのですが、それが正しいかどうかわからず、実際にこれをデバッグすることもできません curl_setopt($ch, CURLOPT_POSTFIELDS,$body);.GETリクエストで使用する権利があるかどうか知っていますか?

このコード全体が POST で完全に機能するため、ご覧のとおり、これを GET に変更しようとしています。

4

5 に答える 5

54

受け入れられた答えは間違っています。GETリクエストには実際に本文を含めることができます。例として、これはWordPress によって実装されたソリューションです:

curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );

編集: 明確にするために、curl_setoptこのインスタンスではイニシャルが必要です。これは、使用時に libcurl がデフォルトで HTTP メソッドをPOST使用するためですCURLOPT_POSTFIELDS(ドキュメントを参照)。

于 2015-07-23T05:48:48.200 に答える
36

CURLOPT_POSTFIELDSPOST名前が示すように、リクエストのボディ (ペイロード) 用です。GETリクエストの場合、ペイロードはクエリ文字列の形式の URL の一部です。

あなたの場合、送信する必要がある引数 (存在する場合) を使用して URL を作成し、cURL の他のオプションを削除する必要があります。

curl_setopt($ch, CURLOPT_URL, $this->service_url.'user/'.$id_user);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);

//$body = '{}';
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET"); 
//curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
于 2013-06-21T07:56:44.487 に答える
-1

あなたは正しい方法でそれを行いました

curl_setopt($ch, CURLOPT_POSTFIELDS,$body);

しかし、私はあなたの行方不明に気づきます

curl_setopt($ch, CURLOPT_POST,1);
于 2013-06-21T07:56:33.327 に答える