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

【Laravel】Guzzleで手軽に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はコードもわかりやすく、手軽に使えるのでぜひぜひ使ってみてください。

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