こんにちは!

「外部サーバーとの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はコードもわかりやすく、手軽に使えるのでぜひぜひ使ってみてください。
それでは、良いコーディングライフを!
コメント