[Symfony] Buzz\Browser でお手軽 HTTP リクエスト
HTTP リクエストを送る PHP ライブラリは数多くありますが、中でも Buzz\Browser が使いやすかったので Symfony での使用例をご紹介。
インストール
いつも通り、Composer でインストールします。作者は Assetic
で有名な Kirs Wallsmith さんです。
php composer.phar require kriswallsmith/Buzz:dev-master
折角 Symfony で使うのでサービスコンテナに登録しちゃいます。
# services.yml services: buzz.client.curl: class: Buzz\Client\Curl public: false # 証明書の検証が必要な場合は calls を削除 calls: - [ setVerifyPeer, [false] ] buzz.browser: class: Buzz\Browser arguments: ["@buzz.client.curl"]
使い方はこんな感じ
適当なコントローラに実装します。
$browser = $this->get('buzz.browser'); # ContainerInterface::get() # 診断くん $response = $browser->get('http://taruo.net/e/'); if (!$response->isSuccessful()) { throw new HttpException($response->getReasonPhrase(), $response->getStatusCode()); } $content = $response->getContent(); # 診断くんの HTML ソース
返却された Response オブジェクトの::isSuccessful()
でリクエスト結果の成否を調べる事ができます。
エラーの際は::getStatusCode()
,::getReasonPhrase()
で内容の確認しましょう。
本文の取得は::getContent()
です。
またBrowser::get()
の第2引数には任意のリクエストヘッダを配列で指定する事ができます。
$browser->get('http://taruo.net/e/', array('User-Agent', 'buzz.browser'));
::get()
の他にも::post()
や::put()
等基本的なものが揃っています。
cURL が使えない環境の人は...
file_get_contents
もサポートされているので安心。サービスコンテナの設定を次のように変更すればOKです。
# services.yml services: buzz.client.file_get_contents: class: Buzz\Client\FileGetContents public: false calls: - [ setVerifyPeer, [false] ] buzz.browser: class: Buzz\Browser arguments: ["@buzz.client.file_get_contents"]
もちろん実装部のソースコードを変える必要はありません。DI コンテナさまさまです♪