F.Ko-Jiの「一秒後は未来」

PHPでHTTPリクエストを扱える「Guzzle」ライブラリ

php-http-guzzle.jpg

PHP で HTTP リクエストを扱うライブラリとして最近おすすめなのは Guzzle でしょうか。以前 HTTP 関連のライブラリを探していた時に「そういえば AWS SDK for PHP で Guzzle ってのが使われていたな」ということを思い出して使い始めました。

使い方は簡単で、composer を使ってインストールすれば次のように使いはじめることができます。

$client = new GuzzleHttp\Client();
$res = $client->get('http://blog.fkoji.com/');

// ステータスコード取得
$res->getStatusCode();

// レスポンスボディ取得
$res->getBody();

ドキュメントの Quickstart を上から下まで眺めれば、基本的な使い方はおおよそ把握できると思います。

例えば GET リクエストにクエリをつけたい場合は、第2引数の配列のキー「query」に指定します。

$res = $client->get('http://blog.fkoji.com/', [
    'query' => [
        'offset' => 10,
        'count' => 20,
    ],
]);

リクエストヘッダーを追加したい場合は、第2引数の配列のキー「headers」に指定します。

// Authorization: bearer someoauthtoken のヘッダーを追加したい場合
$res = $client->get('http://blog.fkoji.com/', [
    'headers' => [
        'Authorization' => 'bearer someoauthtoken',
    ],
]);

POST リクエストは以下のように書きます。送信するデータは第2引数の配列のキー「body」に指定。ちなみに body の代わりに「json」を指定して JSON データの送信に対応させることも可能です。

$res = $client->post('http://blog.fkoji.com/', [
    'body' => [
        'mail' => 'example@example.com',
        'name' => 'fkoji',
    ],
]);

なおエラー時に発生する例外がいくつかあって、エラー処理を細かく分けたい場合に有用です。例えば、

  • GuzzleHttp\Exception\ClientException … 400系のエラー
  • GuzzleHttp\Exception\ServerException … 500系のエラー

これらの例外は両方とも GuzzleHttp\Exception\BadResponseException を継承しているので、まとめて GuzzleHttp\Exception\BadResponseException で受け取ることもできます。概要はドキュメントの Exception の項を参照してください。

Guzzle はバージョンアップが比較的早くて、2014年の1月まではバージョン3系だったのですが、現在の最新バージョンはすでに 5.1.0 となっています。(この記事を読んでいる時点ではさらに進んでるかもしれません。)

バージョン3系とバージョン4以降では Composer におけるパッケージ名が違っていて、バージョン3までは guzzle/guzzle ですが、バージョン4以降では guzzlehttp/guzzle となっていることに注意が必要です。Packagist で検索するとバージョン3系のほうが上位に出るので、うっかり3系をインストールしてしまわないように。書き方もだいぶ違います。

ちなみに AWS SDK for PHP はバージョン3系に依存しているようです。

Guzzle には他にも高度でモダンな機能が用意されているのですが、個人的にまだ全体を把握できていないのでこのあたりの紹介にとどめておきます。

» guzzle/guzzle

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など