生半可な気持ちでプログラマになった男日記

日々地獄の中をさまよっている糞雑魚プログラマの技術ブログ。テニスが好きです。

PHP の HTTP Client ライブラリの Guzzle を使う

またまた、更新が遅れてしまいました。決まった感覚で記事あげるってやっぱり大変ですね。

この前会社の新卒から PHP で「 HTTP リクエスト送信するのって file_get_contents 使うしかないですかね〜?」と質問されました。

調べてみたら Guzzle という便利ライブラリがあったので、どんなもんかなぁと試してみました。

公式ドキュメント

Guzzle, PHP HTTP client — Guzzle Documentation

使い方

Composer でインストール

Composer でインストールしましょう。

composer require guzzlehttp/guzzle

インストールが終わったら、Composer が生成した autoload.php を↓みたいな感じで読み込んでおきましょう。

<?php

require __DIR__ . '/../vendor/autoload.php';

リクエストを送信する

ドキュメントを見ると、GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS はメソッドが用意されてるっぽい。

正直、使いたい HTTP メソッドは全部揃ってます。

あと、上記に加えて非同期でリクエストを送信する Async 版の各メソッドも用意されてます。(getAsync() など)大量のリクエストを送信したい場合や、一度の処理に複数の API を叩く必要がある場合は処理速度が上がったりして便利そう。

ちなみに、ライブラリの中身を見ると Async じゃない同期型のメソッドは request() が呼び出されていますが、最終的には requestAsync() を叩いてるっぽいです。非同期にならないように request() 内で制御かけてました。

適当に POST リクエスト送信します。

<?php

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'リクエスト先URL', 'オプション');

これだけで HTTP リクエストが送信できて、レスポンスを取得できます。

オプションは公式ドキュメントを確認してください。

Request Options — Guzzle Documentation

フォームの値を送信したい場合なんかは form_params オプションを使えば良さそうですね。

Request Options form_params — Guzzle Documentation

最後に

大分端折って紹介しましたが、HTTP ステータスを取得できる getStatusCode() や、レスポンスヘッダーを取得する headers() メソッドもあるので、 file_get_contents() を駆使してリクエスト送るより使い勝手が良いですね。

HTTP リクエスト部分を Factory パターンで抽象化して作ってみました。

github.com