[an error occurred while processing this directive] [an error occurred while processing this directive]


プログラミング
逆引き
クライアントとの通信
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 します。

Use "|TCP|ポート番号"

 たったこれだけで、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サービスみたいに利用できそうです。

 ■ 関連リンク
Openコマンドのパラメータなど詳細に説明してあります (cacheinfo)
  http://www.cacheinfo.com/document/V401/prg/prginterproccomm.html#24365



[an error occurred while processing this directive] [an error occurred while processing this directive]
2012/11/19Update