PHP による cURL GET リクエスト

Olorunfemi Akinlua 2023年1月30日
  1. PHP でリクエストを取得するには、curl_init()curl_setopt() を使用する
  2. PHP の API(JSON)で cURL を使用する
PHP による cURL GET リクエスト

Web、および主に HTTPS を介して、特定のリソース表現を取得するために GET リクエストを使用します。データを取得するには、GET メソッドを使用します。

特に API および Web スクレイピングのシナリオでは、開発者は言語固有の方法を使用します。PHP で GET リクエストを処理するために cURL 関数を使用します。

cURL ライブラリは、初期化、接続設定、転送からリソースリターンまでの操作を処理します。これらすべての操作を実行するために、curl_close()curl_init() から curl_exec() などの組み込み関数を使用できます。

このチュートリアルでは、cURL``GET リクエストのさまざまな使用例と、それを実現する対応する機能について説明します。

PHP でリクエストを取得するには、curl_init()curl_setopt() を使用する

別のサーバーまたはユーザーから要求を取得するための一般的な形式には、次の基本機能を使用することが含まれます。

curl_init(); // initializes a cURL session
curl_setopt(); // changes the cURL session behavior with options
curl_exec(); // executes the started cURL session
curl_close(); // closes the cURL session and deletes the variable made by curl_init();

この記事全体で 4つの関数すべてと、cURL ライブラリを使用して作成する GET リクエストコードのほとんどが表示されます。

ここで、いくつかの使用例として、変数 $url にリクエストを取得するサイトの URL を割り当て、curl_init() 関数を使用して cURL セッションを開始します。その後、指定された URL で実行される cURL 転送のオプションを指定します。

最初の curl_setopt() 関数ステートメントは、$url 変数に値が割り当てられた URLtofetch オプションを保持します。2 番目の curl_setopt() 関数ステートメントは、ブール値を保持する文字列として転送を返すオプションを保持します。

<?php

$url = "https://reqbin.com/echo";

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

//for debug only!
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$resp = curl_exec($curl);
curl_close($curl);
var_dump($resp);

?>

上記の PHP コードの出力は以下のとおりです。

curl_init と curl_setopt を使用して PHP でリクエストを取得します

PHP の API(JSON)で cURL を使用する

通常、API と対話する場合、データ応答は JSON であることが多く、cURL 関数を使用すると、curl_getinfo() および json_encode() 関数を使用して、属性と値のペアおよび配列形式でこれらのデータオブジェクトを適切に処理できます。とりわけ。

ここでは、デモ User API を操作し、cURL ライブラリを使用して JSON データを取得し、適切な関数を使用して JSON ファイルをエンコードします。

  1. URL 変数と cURL セッションを初期化します。

    $url = 'https://jsonplaceholder.typicode.com/users';
    // Sample example to get data.
    $resource = curl_init($url);
    
  2. cURL オプションと情報変数を設定します。

    curl_setopt($resource, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($resource);
    $info = curl_getinfo($resource);
    $code = curl_getinfo($resource, CURLINFO_HTTP_CODE);
    
  3. デバッグして応答ステータスコードを確認します(オプションの手順)が、200 が表示されます。

    echo $result.'<br>';
    echo "<pre>";
    print_r($info);
    echo "</pre>";
    
    // Get response status code
    echo "<pre>";
    print_r($code);
    echo "</pre>";
    
  4. リソースをより適切に管理するために、cURL セッションを閉じます。

    curl_close($resource);
    
  5. API から JSON を介して取得したデータを格納するための配列テンプレートを作成します。

    // set_opt_array
    $user = [
    	'name' => 'John Doe',
    	'username' => 'john',
    	'email' => 'john@example.com'
    ];
    
  6. curl_init() および curl_setopt_array() を使用して、すべての重要なオプションを使用して URL から解析された JSON データを処理します。

    $resource = curl_init();
    curl_setopt_array($resource, [
    	CURLOPT_URL => $url,
    	CURLOPT_RETURNTRANSFER => true,
    	CURLOPT_POST => true,
    	CURLOPT_HTTPHEADER => ['content-type: application/json'],
    	CURLOPT_POSTFIELDS => json_encode($user),
    ]);
    
  7. curl_exec() および curl_close() 関数を使用して、初期化された cURL セッションを実行し、cURL セッションを閉じて、すべてのリソースを解放します。ただし、PHP 8.0.0 以降では、curl_close() 関数は効果がありません

    $result = curl_exec($resource); // creates and returns result
    curl_close($resource);
    echo $result;
    

コードの出力は、以下の PHP 多次元配列になります。

[
  {
    "id": 1,
    "name": "Leanne Graham",
    "username": "Bret",
    "email": "Sincere@april.biz",
    "address": {
      "street": "Kulas Light",
      "suite": "Apt. 556",
      "city": "Gwenborough",
      "zipcode": "92998-3874",
      "geo": {
        "lat": "-37.3159",
        "lng": "81.1496"
      }
    },
    "phone": "1-770-736-8031 x56442",
    "website": "hildegard.org",
    "company": {
      "name": "Romaguera-Crona",
      "catchPhrase": "Multi-layered client-server neural-net",
      "bs": "harness real-time e-markets"
    }
  },
  {
    "id": 2,
    "name": "Ervin Howell",
    "username": "Antonette",
    "email": "Shanna@melissa.tv",
    "address": {
      "street": "Victor Plains",
      "suite": "Suite 879",
      "city": "Wisokyburgh",
      "zipcode": "90566-7771",
      "geo": {
        "lat": "-43.9509",
        "lng": "-34.4618"
      }
    },
    "phone": "010-692-6593 x09125",
    "website": "anastasia.net",
    "company": {
      "name": "Deckow-Crist",
      "catchPhrase": "Proactive didactic contingency",
      "bs": "synergize scalable supply-chains"
    }
  },
  {
    "id": 3,
    "name": "Clementine Bauch",
    "username": "Samantha",
    "email": "Nathan@yesenia.net",
    "address": {
      "street": "Douglas Extension",
      "suite": "Suite 847",
      "city": "McKenziehaven",
      "zipcode": "59590-4157",
      "geo": {
        "lat": "-68.6102",
        "lng": "-47.0653"
      }
    },
    "phone": "1-463-123-4447",
    "website": "ramiro.info",
    "company": {
      "name": "Romaguera-Jacobson",
      "catchPhrase": "Face to face bifurcated interface",
      "bs": "e-enable strategic applications"
    }
  },
....
]
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - PHP Curl