PHPを使ってWEBサーバにAPIリクエストを送信したい場合、Guzzleを利用することができます。

既存のシステムやフレームワークでの使用方法ではなく単独でGuzzleパッケージのインストールを行い使用手方法を説明しています。

Guzzleの設定方法

Guzzle/Guzzleパッケージのインストール

パッケージ管理のComposerを利用してGuzzleのインストールを行います。そのためシステムには事前にComposerをインストールしておく必要があります。

システム上に任意の名前でディレクトリを作成します。

作成したディレクトリの中でcomposer requireコマンドを利用してguzzlehttp/guzzleパッケージのインストールを行います。


$ composer require guzzlehttp/guzzle
Using version ^3.9 for guzzle/guzzle
パッケージ名の似た古いバージョンのguzzle/guzzleパッケージもあるので名前を間違えないようにguzzlehttp/guzzleをインストールしてください。

インストールが完了するとcomposer requireを実行したディレクトリには、composer.json, composer.lock, vendorディレクトリの3つが作成されます。composer.jsonファイルには、インストールしたGuzzleパッケージの情報が記述されます。


{
    "require": {
        "guzzlehttp/guzzle": "^6.3"
    }
}

GETリクエストを使った動作確認

Guzzleパッケージのインストールが完了したら、test.phpファイルを作成してインストールしたGuzzleが動作するか確認します。

test.phpファイルを作成して、下記の内容を記述します。


<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->request('GET', 'https://jsonplaceholder.typicode.com/posts/1');

echo $response->getBody();

require ‘vendor/autoload.php’は忘れずに記述してください。

GETリクエストを実行して、WEBサーバから情報を取得したい場合は下記のように記述します。


$response = $client->request('GET', URL);

requestメソッドを利用していますが、下記のgetメソッドで記述することも可能です。


$response = $client->get(URL);

GuzzleのGETリクエストを使って情報を取得できるか確認するためにテスト動作確認用のJSONPLACEHOLDERを利用しています。

URLにhttps://google.comやhttps://yahoo.co.jpを指定することも可能です

$responseの中身をgetBodyメソッドで確認すると下記のJSONデータがJSONPLACDHOLDERから戻ってきていることを確認できます。


$ php test.php
{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

わずか数行のコードを記述するだけで外部のサーバからGETメソッドを利用して簡単にデータを取得できることがわかります。

メソッドについて

getbodyを使ってレスポンスの中身を確認しましたが、getStatusCodeやgetHeaderLineなどのメソッドもあります。


<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$response = $client->request('GET', 'https://jsonplaceholder.typicode.com/posts/1');

echo 'Content-Type:'.$response->getHeaderLine('content-type');
echo 'StatusCode:'.$response->getStatusCode();

実行するとContent-Typeとステータスコードを確認することができます。


$ php test.php
Content-Type:application/json; charset=utf-8S
StatusCode:200

その他の使用方法

POSTリクエストによる送信

form_paramsを利用することでPOSTリクエストをおくることができます。


require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

$options = [
'form_params' => [
    "foo" => "bar"
   ]
];

$response = $client->request('POST', 'http://127.0.0.1:8000/api/test', $options);

echo $response->getBody();

POSTでのリクエスト方法の記述はpostメソッドを使用しても可能です。


$response = $client->post('http://127.0.0.1:8000/api/test', $options);

アクセストークンの送信方法

DropboxやSlackなどAPIを公開し、アクセストークンを利用してアクセスできるサービスが増えてきています。その場合にもGuzzleHttpを活用することができます。


$response = $client->request('GET', URL, [
    'headers' => [
        'Content-Type' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);