httpアクセス
ソケット通信の練習としてhttpアクセスをやってみる。
3.8.9 getline を使ってコプロセスから入力する
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC64
gawkはコプロセス(coprocess)を起動して 双方向の通信を可能にすることができる。 これは`|&'演算子を使って行う。 典型的には、以下の例のように データをコプロセスに書き込んでから結果を読み取る:
print "some query" |& "db_server"
"db_server" |& getline
4.7.3 スペシャルファイル for Network Communications
http://www.kt.rim.or.jp/~kbk/gawk-3.1/gawk.html#SEC84
gawkのバージョン 3.1から、awkプログラムで 双方向のTCP/IPコネクションをオープンすることが可能となり クライアントやサーバーとして振舞うことができるようになった。 これは以下の形式の特殊なファイル名を使って行う:
`/inet/プロトコル/ローカルポート/リモートホスト/リモートポート'
というわけで以下のコードで、googleのページ(とヘッダ)がとってこれる。
ファイルパスの形式でソケットのパラメータを与えるのが面白い。
BEGIN{ host="www.google.com" http="/inet/tcp/0/"host"/80" print "GET / HTTP/1.0\nHost: "host"\n" |& http while(http |& getline) print close(http) }