- 締切済み
InternetReadFile関数でHTMLデータをメモリに格納
HTMLソースをメモリに格納したいのですが、 以下のように1000バイトずつデータをBuffに格納するのはできたのですが、 HTMLファイル全てのデータをメモリに格納する場合はどのようにしたらいいのでしょうか? char Buff[1000]; for(;;){ ReadSize = 1000; bResult = InternetReadFile ( hFile, Buff, 1000, &ReadSize ); //全て読み込み終わるとループを抜ける if( bResult && (ReadSize == 0) ) break; Buff[ReadSize] = '\0'; }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>index.htmlを付加したらエラーになります。 あら、ほんとですね。 でも、とりあえず http://www.gyao.jp で、ダウンロードは、できました。 最悪、コンテンツ長が得られない場合、ファイルとして保存したらどうでしょうか。(ファイルからは、サイズが得られるでしょうし)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>http://www.yahoo.co.jpのHTMLソースを取得する場合 InternetOpenUrlで、 "http://www.yahoo.co.jp" を指定したら、取得できます。 大抵のWEBサーバーでは、デフォルトでindex.htmlになっているので、 "http://www.yahoo.co.jp/index.html" でいいですが、 "http://www.yahoo.co.jp" を指定しても、 "http://www.yahoo.co.jp/index.html" を返してくれます。 (実際試してみました)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
http://support.microsoft.com/default.aspx?scid=/isapi/gomscom.asp?target=/japan/support/kb/articles/jp234/9/13.asp みたいにして、取得するファイルのサイズを得られるので、 それから、malloc などで、メモリ上にバッファを確保すればいいと思います。
補足
今、InternetOpen()→InternetOpenUrl()でファイルを開いています。 InternetOpen()→InternetConnect()→HttpOpenRequest()の場合、リクエストにはGETであることはわかりますが、例えば、http://www.yahoo.co.jpのHTMLソースが欲しいときは、HttpOpenRequest()の引数に取得HTMLファイル名はないような気がします。 もし、index.htmlなどのようなHTMLファイルではなく、http://www.yahoo.co.jpのHTMLソースを取得する場合は、InternetConnection(),HttpOpenRequest()の引数はどのように指定したらいいのでしょうか? よろしくお願い致します。
補足
もし、index.htmlで得られないWebサーバーでは、 HttpOpenRequest()→HttpQueryInfo()の流れはできないのでしょうか? GYAOのページでは、http://www.gyao.jp/にindex.htmlを付加したらエラーになります。