ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

AJAXでいろんなサイトにアクセスするための、トンネルCGIの作り方

2006-07-24 17:22:48 | JavaとWeb

 前のブログに書いたとおり、AJAXで、そのプログラムが置いてある以外のサーバーにアクセスするためには、

 ・以下のようなトンネルCGIを使って、
 ・トンネルCGIが複数のサイトにアクセスするようにして、
 ・その結果を、AJAXプログラムが利用し、クライアントに返すと

いう形にしないといけない

クライアント<===>AJAXプログラム
             ↑
             ↓
           *----*<====>サイトA
           |トンネル|<====>サイトB
           |CGI |<====>サイトC
           *----*   :

・AJAXプログラムとトンネルCGIは、同じサーバーのところにある。


では、このような、トンネルCGIをどうやって作るかというお話。




 これは、CGIが、他のサイトにアクセスして、その結果を、そのまま出力する(呼び出し側に返す)ことで実現できる。

 POST型において、このケースは、すでに
 CGI(Perl)でHTTPのPOST型で他サイトにアクセスして、内容を取得する方法
 に書いてある。

 では、Get型ではどうか?という話ですけど、
 Getで、

 print "Location: http://とびたいさき";

 と書いても、AJAXで利用できない(結局、飛びたい先のURLにアクセスしようとするため、結果を受け取れない)。
 というわけで、上記にあげたPOST型のプログラムをGetに改造することになる。

 ここで、

   http://jws.jalan.net/content/data/area.xml

っていうところにアクセスしたいとしよう。
え、なぜ、そのサイトだって、理由は聞くな。一部の人にはわかるであろう。




 その場合は、POST型の例の「exit;」までを、こう直します。

#!c:/perl/bin/Perl.exe
use Socket;

$HOST    = 'jws.jalan.net';
$PORT    = '80';
$PATH   = '/content/data/area.xml';
$TIMEOUT = '10';

$QUERY = ''; # 今回は引数はないので””

print "Content-Type: text/xml¥n¥n";
print Header_Cut(Location_Post($HOST, $PORT, $PATH, $QUERY));

exit;

(上記 < > ¥は、本当は半角です)

つまり、$HOSTと$PATHを直します。これは、違うところにアクセスしたい場合は、そのサイト名に変えてください。
$QUERYは今回、引数無しなので、こんなかんじ




そして、プログラムについては、
print SOCK "POST $file HTTP/1.0" . "¥r¥n";
ってかいてあるところを
print SOCK "GET $file HTTP/1.0" . "¥r¥n";
にして、

その後
print SOCK "Content-Length: $len" . "¥r¥n¥r¥n";
ってかいてあるところを
print SOCK "¥r¥n¥r¥n";
にします

そのへんをまとめると、こんなかんじ
        # HTTP 要求ヘッダー
        # POST メソッドで要求します。
#        print SOCK "POST $file HTTP/1.0" . "¥r¥n";
        # こんかいはGETなので、こうします
        print SOCK "GET $file HTTP/1.0" . "¥r¥n";

        # Content-Length: を送る(クエリーのバイト数)
        # ヘッダーの最後は2回改行する
#        print SOCK "Content-Length: $len" . "¥r¥n¥r¥n";
        print SOCK "¥r¥n¥r¥n";

(上記 < > ¥は、本当は半角です)




 POSTでもGetでもどっちでもOKにしたり、もっと汎用的にするためには、引数で、いろいろ受け取って、処理しないといけないわけだけど、それを書き出すと複雑になるので、今回は省略です。



この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« FireFoxとIEでのXMLHttpReque... | トップ | Gizmoで通話料を無料?(日本... »
最新の画像もっと見る

JavaとWeb」カテゴリの最新記事