プログラム関連

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 '&nbsp;<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