プログラミング
逆引き
クライアントとの通信
VisMでの通信
Factoryでの通信
WebServiceでの通信
CSP (Cache' Server Pages)
Cache'SQL
設定・性能
|
【広告】
|
HTTPでつながる?
Speak HTTP protocol.
キャシェーは強力な入出力機能を持っています。外部アプリケーションを使うことなくファイルの入出力、ネットワーク入出力、パラレル入出力、テープ入出力などが可能です。
ここではCache'から直接TCP/IPのポートをオープンして、HTTPでWEBページの内容を取得してみます。
TCP/IPのポートを開くのも、ファイルを開くのと同様に Open コマンドを使用します。
Open "|TCP|ポート番号":接続先:タイムアウト値 |
Open したら、次は Use します。
たったこれだけで、TCP/IPのポートが開いてしまいます。あとは送信がWrite、受信がReadでやり取りをするだけです。パラメーターが違うだけで、手順はファイル操作とまったく同じです。
では、HTMLファイルを取得し、その内容をターミナル画面に表示するルーチンを作成してみます。
GETS(URL) ;HTMLファイル(σ゚д゚)σゲッツ
;【機能】WWWサーバに接続し、HTMLをローカル変数REVに書き込む
;【入力】URL 取得するURL
;
W "ファイルを取得しています(",URL,")..."
;
N ret,count,I,tout,dev,addr,path,tmp,CRLF
S CRLF=$c(13)_$c(10) ;改行コードの設定
S dev="|TCP|80" ;
S addr=$P($P(URL,"://",2),"/",1)
;ex
www.asahi.com
S path="/"_$P($P(URL,"://",2),"/",2,99)
;ex /news/today/top.html
;
C dev ;前回正常終了しなかったときのため
O dev:addr:30
;
;■接続
U dev
W "GET "_path_" HTTP/1.1"_CRLF,!
;要求送信
W "Referer: "_CRLF,!
;Riffer送信
W "User-Agent: Mozilla/4.0(compatible; MSIE5.01; Windows NT 5.0)"_CRLF,!
;UserAgent送信
W "Accept: */*"_CRLF,!
;Accept送信
W "Accept-Language: ja"_CRLF,!
W "Accept-Encoding: SJIS"_CRLF,!
W "HOST: "_addr_CRLF,!
W CRLF,!
;
;■受信
K DAT
S I=$$SetIO^%NLS("SJIS")
F I=1:1 R DAT:3
Q:'$T D Q:$ZB=-1
;取得できなくなるまでループ
.U 0 ;ターミナルに入出力を変更
.W DAT ;取得した内容を表示
.U dev ;入出力をネットワークに戻す
C dev
;
W "完了",!
Q |
取得するHTMLファイルのURLを引数として渡します
変数をNewします
変数CRLFに改行コードを設定します
変数devにデバイス名を設定します
引数として渡されたURLからサーバアドレス部を取得します
引数として渡されたURLからパス部を取得します
本当はエラー時はトラップさせて、必ずCloseさせるようにするべきです
ポートを開きます
ポートを入出力デバイスに定義します
WWWサーバー側にリクエストを送信します。
このあたりはHTTPの仕様になります。
プロキシが入るときは
dev="|TCP|ProxyPort"
addr=ProxyAddress
path=URL
のようにすればいいと思います。
WWWサーバからデータが送られてこなくなるまでループします。
ポートを閉じます。
|
動作させて見ます。
手前味噌ですが、当サイトのトップページ(親フレーム)を取得してみます。
USER>D GETS^WEBPICK("http://aoiro.s378.xrea.com/")
ファイルを取得しています(http://zerogravity.hp.infoseek.co.jp/)...HTTP/1.1 200 OK
Date: Sat, 24 May 2003 18:59:01 GMT
Server: Apache/1.3.22 (Unix) mod_perl/1.26 WhizBanner/1.0
Set-Cookie: Fhp=3EE42BD692C095C51E7ACD9FADE72383; domain=infoseek.co.jp;
path=/;
expires=Tuesday, 31-Dec-2030 23:59:59 GMT
Content-Length: 527
Content-Type: text/html
<html lang=ja><!--nobanner-->
<META NAME="WWWC" CONTENT="2003/03/24 01:00">
<title
>■青色立方体研究所</title>
<frameset cols="180,*" border=0 frameborder=0><!--180,* --><fr
ame src="left.shtml" name=left noresize target=main><frame src="index2.html"
nam
e=main>
<noframes><body>このページはデータベースエンジン Cache'(キャシェー) を使っ
て気づいたことなどをメモ書き程度に書きとめたものです。<br>誤り・ウソ・大げさ・ま
ぎらわしい点ががありましたらご指摘ください。<br><a href="index2.html">Enter</a><
/body></noframes></frameset></html>完了
USER> |
一切エラーハンドリングしてないとはいえ、たったこれだけでHTTPプロトコルでリクエストを投げ、それを取得するプログラムができてしまいました。
あとはこの取得したデータを、煮るなり焼くなり好きにできます。
さらに、HTTPリクエストを加工すれば、望んだデータを取得することもできます。
普通のWEBページでユーザがブラウザから操作することが前提になっているWEBサービスみたいに利用できそうです。
|
|