web-dev-qa-db-ja.com

PHP cURL GETリクエストとリクエストの本文

私はこのような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を渡したいが、それが正しいかどうかわからず、実際にこれをデバッグすることはできません、あなたはcurl_setopt($ch, CURLOPT_POSTFIELDS,$body);を使用する権利があるかどうかを知っていますGETリクエストで?

このコードはPOSTで完璧に機能します。今、私はこれをGETに変更しようとしています

26
itsme

CURLOPT_POSTFIELDSは名前が示すように、POSTリクエストのボディ(ペイロード)用です。 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);
25
Burhan Khalid

受け入れられた答えは間違っています。 GETリクエストには実際に本文を含めることができます。これは解決策です WordPressで実装 、例として:

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

編集:明確にするために、最初のcurl_setoptはこの例では必要ありませんが、害はありません。参照されているサンプルコードを完全に示すために含まれています。

27
Dan
  <?php
  $post = ['batch_id'=> "2"];
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,'https://example.com/student_list.php');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
  $response = curl_exec($ch);
  $result = json_decode($response);
  curl_close($ch); // Close the connection
  $new=   $result->status;
  if( $new =="1")
  {
    echo "<script>alert('Student list')</script>";
  }
  else 
  {
    echo "<script>alert('Not Removed')</script>";
  }

  ?>
4

同様の問題でこれに来る人のために、 このリクエストライブラリ を使用すると、PHPアプリケーション内で外部HTTPリクエストを無意識に作成できます。簡略化されたGET、POST、PATCH、DELETE、およびPUT要求。

サンプルのリクエストは次のようになります

use Libraries\Request;

$data = [
  'samplekey' => 'value',
  'otherkey' => 'othervalue'
];

$headers = [
  'Content-Type' => 'application/json',
  'Content-Length' => sizeof($data)
];

$response = Request::post('https://example.com', $data, $headers);
// the $response variable contains response from the request

同じものに関するドキュメントは、プロジェクトの README.md にあります。

0
Danny Sofftie