【Laravel】Guzzleで手軽にHTTP通信を行う

Laravel

こんにちは!

読者
読者

「外部サーバーとのHTTP通信方法がわからない…」

「外部APIを実行してみたいけど、方法がわからない…」

「手軽にHTTP通信する方法が知りたい…」

などお考えの方向けに、今回は初心者でも手軽にHTTP通信できるパッケージである「Guzzle」についてご紹介していきます。

GuzzleパッケージはLaravelに限らず、様々な場面で汎用的に使われるパッケージですが、今回はLaravel目線で解説していきます。

本記事でわかること

  • Guzzleの概要
  • Guzzleのインストール方法
  • Guzzleの基本的な使い方

概要

Guzzleとは、端的に言うと「簡単にHTTP通信できるようにしたHTTP通信用のパッケージ」のことです。

例えば、Guzzleを使わずにHTTP通信を行おうとすると、curlやfile_get_contents関数などを使うことになると思います。ただ、これらの方法は慣れていないとわかりにくく、つまずきポイントが多いです。

そこで、Guzzleパッケージを使うことで、初心者でもより簡単でわかりやすくHTTP通信することができるようになります。

実際に、筆者の経験した開発現場でもHTTP通信を行う場合には、Guzzleパッケージを使うことが多かったです。

インストール方法

インストール方法と書きましたが、実はLaravelにはデフォルトでGuzzleパッケージがすでに入ってます笑。

本当に入っているか確認したい場合は、composer.jsonというファイルを見にいけば確認できます。

"require": {
    ...
    "guzzlehttp/guzzle": "^7.2",
    ...
},

ただし、もし削除などしてしまった場合は以下のコマンドでインストールすることができます。

composer require guzzlehttp/guzzle

基本的な使い方

ここでは、Guzzleの基本的な使い方について解説していきます。

リクエストの作成

GETリクエストを作成する場合は、以下のようになります。

use GuzzleHttp\Client;

$client = new Client();

$response = $client->request('GET', 'http://httpbin.org');

echo $response->getBody()->getContents(); // レスポンス本文取得

非常に簡単ですね。

基本的にGET,POST,PUT,DELETE全て上記のような形式になります。

また、お気づきの通り、requestメソッドの第一引数にはメソッド名が入り、第二引数にURIが入ります。

それでは、POSTリクエストの場合も見てみましょう。

use GuzzleHttp\Client;

$client = new Client();

$options = [
    'form_params' => [
        'field_name' => 'abc',
        'other_field' => '123',
        'nested_field' => [
            'nested' => 'hello'
        ]
    ]
];

$response = $client->request('POST', 'http://httpbin.org/post', $options);

echo $response->getBody()->getContents(); // レスポンス本文取得

GETとの違いは、requestメソッドの第三引数にリクエストデータを入れているところですね。他はGETと変わりません。

また、仮にベースURLが固定で決まっている場合は、以下のように書くこともできます。

use GuzzleHttp\\Client;

$client = new Client(['base_uri' => 'https://foo.com/api/']);

$response = $client->request('GET', 'test'); // <https://foo.com/api/test>

echo $response->getBody()->getContents(); // レスポンス本文取得

ClientインスタンスにベースURLを渡しておくことで、requestメソッドに全てのURIを書かなくて済みます。他のメソッドの場合も同様ですね。

ヘッダーの設定や取得

リクエストヘッダーを設定することや、レスポンスヘッダーを取得することもできます。

以下はリクエストヘッダーを設定する例です。

use GuzzleHttp\Client;

$client = new Client();

$options = [
    'headers' => [
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz']
    ]
];

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

echo $response->getBody()->getContents(); // レスポンス本文取得

リクエストヘッダーをつけたい場合は、「headers」という名前の連想配列をオプションに入れるだけです。

レスポンスヘッダーを取得することもできます。

use GuzzleHttp\Client;

$client = new Client();

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

echo $response->getStatusCode(); // 200

echo $response->getHeaderLine('content-type') // text/html; charset=utf-8

まとめ

Guzzleを使えば、簡単にHTTP通信を行うことができることがわかりました。

筆者は特に外部APIを実行したり、HTMLソースを取得したい時なんかにGuzzleを使うことが多いです。

Guzzleはコードもわかりやすく、手軽に使えるのでぜひぜひ使ってみてください。

それでは、良いコーディングライフを!

コメント

タイトルとURLをコピーしました