httpclient
wiresharkを使ってパケット解析するのがmyブームなので、その一貫としてhttpclient(downloader..)を作ろうと思った。重要なのはサーバーとconnectionを確立した後
fprintf(fp, "GET %s HTTP/1.0\r\n", path);
fprintf(fp, "Host: %s:%d\r\n", host, port);
fprintf(fp, "\r\n");
とかといったメッセージをサーバーに送り、その応答を取得することにある。
ここまではいいのだけど、次にパケットのヘッダーとボディを別々に取得し、名前をつけてデータを取得するという作業が残る。これができたらダウンローダーの原型は完成する。
どうしようかなぁ
いまのところ、downという自作バイナリを実行すると以下のようになります
./down http://www.google.com/index.html test(保存するファイル名)
Location: http://www.google.co.jp/index.html^M
Cache-Control: private^M
Set-Cookie: PREF=ID=3a25feac3a68bf37:TM=1176156151:LM=1176156151:S=AecJ2yNaBu6o\
BWOx; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com^M
Content-Type: text/html^M
Server: GWS/2.1^M
Content-Length: 231^M
Date: Mon, 09 Apr 2007 22:02:31 GMT^M
Connection: Keep-Alive^M
^M
302 Moved
302 Moved
The document has moved
here.^M^M
こんな感じです。これを今後どうやって改良していくかがポイント。 perlでつくるwebクライアントって本を最近見つけたので参考にこれを買うといいかもしれないと思った。
まあwgetのソースを参考に?するのもいいかもしれないかなぁ. とするとwget ~.imgとかと実行してる間にプログラム中のどこを実行してるか見るとソース解析しやすいと思うんだけどどうしたらいいだろうか?調査かな..