▶ プログラム関連
PHP WEBリクエスト2 Class
PHP WEBリクエスト2 Class
ブラウザの HTTP アクセスをエミューレートするクラスです。
もしサーバで PEAR HTTP_REQUEST2 が使えない場合は、Ver1 を利用してください
PHP WEBリクエストクラス Ver.1
DOWNLOAD
ダウンロード(本体ファイル:WebRequest2.class.php)
バージョン 2013.08.13
Methods
WebRequest constructor
- setUrl
- setConnectTimeout コネクションタイムアウト設定(秒) false で NO LIMIT
- setTimeout 新規 全体のタイムアウト設定(秒) false で NO LIMIT
- setRedirectCount 最大自動リダイレクト回数
- setCookie
- setHeader
- setReferer
- setUserAgent
setHost
- set CGIパラメータ設定
sets CGIパラメータ設定(複数)
- sendGet : GETリクエストを送信 戻り値はHTML(String)
sendPost : POSTリクエストを送信 戻り値はHTML(String)
- getCookies
- getResponseCookies 下位互換用(alias of getCookies)
- getHeaders
- getCode
- getUrl
getLastRequestUrl 下位互換用(alias of getUrl)
- fileWrite
fileWriteAdd
- getRequestTime リクエストにかかった時間を取得(ms)
- getErrorMessage
※ setReadTimeout は廃止されました。setTimeout で全体のタイムアウトを指定してください
Ver.1 からの変更内容
- PEAR HTTP_Request2 のラッパークラスになりました
- try- catch でエラーハンドリングができるようになりました
- 動作、メソッドは WebRequestクラス とほぼ同等なので、移行コストは低いです(下位互換)
- クラス名は Ver.1 同等 WebRequest です
サンプルコード
サンプル1
YahooトップページHTML取得
<?php
require_once 'WebRequest2.class.php';
$test = new WebRequest('http://www.yahoo.co.jp/');
echo $test->sendGet();
exit;
サンプル2
AltSpaceに記事を自動投稿
<?php
require_once 'WebRequest2.class.php';
$test = new WebRequest('https://ssl.altspace.jp/login.php?');
$test->set('_form_name_', 'login');
$test->set('username', 'XXXXXXXXXXXXX');
$test->set('password', 'XXXXXXXXXXXXX');
$test->sendPost();
$token = $test->getCookies();
$test->setUrl('http://altspace.jp/comm_article.php?cid=1131&aid=121682');
$test->set('_form_name_', 'article_comment');
$test->set('BSNSESSID', $token['BSNSESSID']); // Cookieセット(CSRF)
$test->set('MAX_FILE_SIZE', '5242880');
$test->set('cid', '1131');
$test->set('aid', '121682');
$test->set('comment', '投稿テスト');
$test->sendPost();
exit;
サンプル3
Google Reader スターブックマーク 一覧取得
Google Reader API仕様
Authentication in the Google Data Protocol
<?php
require_once 'WebRequest2.class.php';
// === SID取得 ===
$test = new WebRequest('https://www.google.com/accounts/ClientLogin');
$test->set('Email', 'XXXXXXXXXXXXX');
$test->set('Passwd', 'XXXXXXXXXXXXX');
$test->set('service', 'reader');
$test->set('source', 'tatenosystem-api-001');
$response = $test->sendPost();
$desc = explode("\n", $response);
$sid = str_replace('SID=', '', $desc[0]);
$lsid = str_replace('LSID=', '', $desc[1]);
$auth = str_replace('Auth=', '', $desc[2]);
echo "[SID]", $sid ."\n";
echo "[LSID]", $lsid ."\n";
echo "[AUTH]", $auth ."\n";
// === トークン取得 ===
$test->setUrl('http://www.google.com/reader/api/0/token');
$test->setCookie("SID", $sid);
$test->setCookie("LSID", $lsid);
$test->setHeader('Authorization', 'GoogleLogin auth='.$auth);
$token = $test->sendGet();
echo "[T]", $token ."\n";
// === 内容取得 ===
$test->setUrl('http://www.google.com/reader/atom/user/-/state/com.google/starred?n=200');
$test->setCookie("SID", $sid);
$test->setCookie("LSID", $lsid);
$test->setCookie("T", $token);
$test->setHeader('Authorization', 'GoogleLogin auth='.$auth);
$response = $test->sendGet();
$configObj = @simplexml_load_string($response);
foreach ($configObj->entry as $obj) {
echo '<a href="'. $obj->link['href'] .'">';
echo $obj->title .'<br />';
echo '</a>';
echo $obj->link['href'] .'<br />';
echo ' <br />';
echo "\n";
}
exit;
サンプル4
Yahooロゴ画像取得保存
<?php
require_once 'WebRequest2.class.php';
$test = new WebRequest('http://k.yimg.jp/images/top/sp/logo.gif');
$data = $test->sendGet();
$test->fileWrite('yahoo.gif', $data);
exit;
2つのエラーハンドリングモード
try-catch (デフォルト)
try-catch でエラーハンドリングを行います。
try {
$test = new WebRequest('https://www.inmobi.co.jp/app/login.html');
$test->set('name', 'hoge');
$data = $test->sendPost();
} catch(HTTP_Request2_Exception $e) {
echo $e->getMessage();
}
メソッドの戻り値でエラーハンドリング
コンストラクタの第二引数に false を指定すると メソッドの戻り値でエラーハンドリングが行えます(ver1.0と同様)
$test = new WebRequest('https://www.inmobi.co.jp/app/login.html', false);
コンストラクタでの URL 指定を行わない場合は、第一引数は null を指定します。
$test = new WebRequest(null, false);
sendGet()、sendPost() の戻り値が false の場合、getErrorMessage() メソッドでエラー内容を確認することができます。
$test = new WebRequest('https://www.inmobi.co.jp/app/login.html', false);
$test->set('name', 'hoge');
$data = $test->sendPost();
if ($data === false) {
echo $test->getErrorMessage();
}
参考URL
- Manual :: PEAR HTTP_Request2
http://pear.php.net/manual/en/package.http.http-request2.intro.php
Special Thanks