2014年5月31日土曜日

WinINet(InternetReadFile)によるファイル(HTMLも含む)のダウンロード

InternetReadFileを使ったファイルのダウンロード方法について、
あまり良いサンプルが無かったので上げておく。

http://nienie.com/~masapico/api_HttpSendRequest.html
を参考にした。

そのうち全体として構成したソースコードを上げたいのだが、
まだサンプルを書いていないので、
取りあえずダウンロード部分の関数だけ。

int Web_Downloader(
        char *Server_Host_Address,//ホストアドレス
        char *FileLocation,       //ファイルの場所
        char *Referer ,           //リファラ
        char *SaveDirectory ,     //保存先のディレクトリ
        char *SaveName            //保存する名前
);


例えば、
で紹介されているフリー素材の
をデスクトップにダウンロードしようとした場合、

Web_Downloader(
        "www.hmix.net",
        "music/c/c7.mp3",
        "www.hmix.net" ,
        "C:\\Users\\<<ユーザー名>>\\Desktop" , //.exeと同じディレクトリなら「"./"」
        "星寂の散歩道.mp3"                     //拡張子も必要なので注意
);


のようにする事でダウンロードして保存される。

以下ソースコード



例の如く、Webで表示する関係上、tabをスペースで置換処理しているので、
ファイルとして置いておく。

MD5 | 6f2ddf168bdbf43ab98271f1f264c913 | 3.3 KB | Web_Downloader()関数
http://ux.getuploader.com/ADMIS/download/42/WinINet%28InternetReadFile%29%E3%81%AB%E3%82%88%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%28HTML%E3%82%82%E5%90%AB%E3%82%80%29%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89.zip


追記:
ヘッダにContent-Length:が定義されていないページの場合、
HTTP_QUERY_CONTENT_LENGTHの関係で、
関数が失敗する事が判明。(後で書き直そう……)

例えば、
Web_Downloader(
"www.google.co.jp",
"index.html",
"www.google.co.jp" ,
// "C:\\Users\\<<ユーザー名>>\\Desktop" , //.exeと同じディレクトリなら「"./"」
"R:\\" , //.exeと同じディレクトリなら「"./"」
"google.html"                     //拡張子も必要なので注意
);
みたいに、googleにアクセスすると、見事に失敗する。

0 件のコメント:

コメントを投稿