2007年10月29日月曜日

PHPでProxy

スズキです。

AJAX関係の実装していると、XMLHttpRequestの
クロスドメインに関するセキュリティ制限を回避するために
代理で他サイトのデータを取得する下記のようなPHPを
用意することが多々あります。
http://suzlab.x10hosting.com/php/proxy.php/http://www.yahoo.co.jp
※本当はPATHINFOのURLはURLエンコードすべき

以前、file_get_contents($url)を用いてつくったのですが、
ホスティングサーバによっては、この引数に、
URLを指定できないものが多々あります。
(allow_url_fopenが1に設定されてないってことです)

そうすると、他の方法で実現しないといけないのですが、
下記、HTTPRetrieverを使うとうまくいきました。
http://code.blitzaffe.com/pages/phpclasses/category/52/fileid/6

せっかくなので、下記スクリプト群にて、
allow_url_fopenが1なら、file_get_contents($url)を利用、
そうでない場合はHTTPRetrieverを利用する、proxy.php
にしておきました。
▼proxy.php
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/www/php/proxy.php
▼proxy.php内で使うProxyの抽象クラス
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/Proxy.php
▼file_get_contents($url)を利用したProxyの実装
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/proxy/FopenProxy.php
▼HTTPRetrieverを利用したProxyの実装
http://suz-lab.googlecode.com/svn/trunk/suz-example-php/app/php/lib/proxy/HttpRetrieverProxy.php
▼デモ
http://suzlab.x10hosting.com/php/proxy.php/http://www.yahoo.co.jp

近頃、Javaからの現実逃避でPHPの実装をしてしまう...
Javaの仕事やらないと...

--
blog: http://suz-lab.blogspot.com/

0 コメント: