Web サービスの最近のブログ記事

5.3 から HTTP ストリームのコンテキストに ignore_errors オプションが利用できるようになるそうです。

01 Aug 2008, PHP 5.3.0 Alpha 1
- Improved streams:
  . Added "ignore_errors" option to http fopen wrapper. (David Zulke, Sara)

今までは fopen() や file_get_contents() の URL に HTTP ストリームを指定した場合、HTTP レスポンスのステータスコードが(最終的に) 2xx でなければレスポンスボディを取得できませんでした。ところが HTTP の仕様としてレスポンスボディを設定できるステータスコードは 2xx だけではありません。PHP 5.3 からはコンテキストに ignore_errors = true を設定すると、エラーとなっていたステータスコードを無視するようになります。次のコードは HTTP サーバが 404 として用意しているレスポンスボディを取得します。

$context = stream_context_create(array('http' => array('ignore_errors' => true)));
echo file_get_contents('http://www.example.com/not-exists-url', false, $context);

また、REST スタイルな Web API にアクセスして取得に失敗した時に、それが認証が必要だったせいなのか、サービスが存在していなかったのか、リクエストの内容が間違っていたのか、さまざまな状態を判別するのに使えるステータスコードを拾えるようになります。

例として、ハイパーテキスト・コーヒーポット制御プロトコルを実装した HTCPCP サーバに HTTP ストリームを使ってアクセスするコードを上げます。

<php
// なにもしない、なにも足さない、HTCPCP サーバ

switch (strtoupper($_SERVER['REQUEST_METHOD']))
{
    case 'POST':
    case 'BREW':
    case 'WHEN':
        header('HTTP/1.1 418 I\'m a teapot', true, 418);
        header('Content-Type: text/plain', true);
        echo '私は急須だ。';
        break;
    
    default:
        header('HTTP/1.1 501 Not Implemented', true, 501);
        echo '要求されたメソッドは未実装です。';
        break;
}
<php
// HTCPCP サーバに対して BREW メソッドを発行するクライアントプログラム

$coffeepot = 'http://www.example.com/coffeepot.php';
$options = array(
    'http' => array(
        'method' => 'BREW',
        'header' => array('Content-Type: message/coffeepot'),
        'content' => 'start',
        'ignore_errors' => true,
    ),
);
$stream = @fopen($coffeepot, 'rb', false, stream_context_create($options));
$meta = stream_get_meta_data($stream);
preg_match('|\\AHTTP/\\d\\.\\d +(?<status_code>\\d{3}) +(?<reason_phrase>.*)\\E|', $meta['wrapper_data'][0], $captures);
echo $captures['status_code'], '/', $captures['reason_phrase'], PHP_EOL;
fpassthru($stream);
fclose($stream);

結果

418/I'm a teapot
私は急須だ。

怒られちゃいましたね。こんな具合に、Web API をちょっと叩いてみたい時に PEAR::HTTP_Client や Zend_Http_Client 等の外部ライブラリに頼らずともできるようになるのはありがたいです。

価格.comプロバイダ検索 API を使ったサンプル

こちらで公開してます。

ss.png

ライブラリのソースが見れちゃってステキ

Flex SDK 2 はソースが公開されているので問題の解決が早い。Flex ドキュメンテーション で公開されている分だけでは分かりにくい部分を確認する事ができます。

例えば mx.containers.TitleWindow オブジェクトを mx.managers.PopUpManager.addPopUp メソッドでモーダル表示させると TitleWindow.showEffect に設定したエフェクトは再生されません。TitleWindow.showEffect は FlexEvent.SHOW イベントをトリガにして再生されますが、PopUpManager が TitleWindow から SHOW イベントが発生しないようにしている為です。(PopUpManager はポップアップ ウィンドウの IUIComponent.setVisible メソッドを使って IUIComponent.visible 値を更新しています。でも、何故かしら?)。なのでポップアップ ウィンドウ側の setVisible メソッドをオーバーライドしてエフェクトを再生するようにしてしまえばいい…のか分かりませんが、とにかくその場しのぎが出来ます。ありがとうオープンソース。

Web2.0 Logo Creator

| | コメント(3)

気分はもう Web 2.0

ポップな EYE(瞳) を持った若者達 ――― 旬から少し外れてても気にしない、肉だって少し腐ってた方がおいしいしね ――― にグレイテスト ヒットしているツール、それが Web2.0 Logo Creator だ。簡単な操作であっという間に(この”あっ”と言う間にトイレにいって冷蔵庫から新しいビックルを取り出してきた事は余談だ)クールなロゴを作ってくれる。ネットの最前線で邪魔にならないように戦ってるIT戦士達にもってこいなアイテム。こいつを持って「サイバーカスケード?バカ言うな、情報リテラシー?冗談じゃない、男は黙って Web 2.0!」 と唱えるだけで顧客はノックダウン。魔女の婆さんだってホウキより掃除機にまたがるんだ。いい加減に僕らも出たとこ勝負で 2.0 になるべきなんだ。

(reflect)GARIGARI+KUN2.0BETA.png

このアーカイブについて

このページには、過去に書かれたブログ記事のうちWeb サービスカテゴリに属しているものが含まれています。

前のカテゴリはUnicodeです。

次のカテゴリはXMLです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Web サービス: 月別アーカイブ

Powered by Movable Type 4.12