【C++】HTTPでコンテンツを取得

みんなが作った便利な関数やサンプルを共有するコミュニティです。
[url]http://www.activebasic.com/forum/viewforum.php?f=2]ActiveBasicの「実践コードモジュール」[/url]的な感じでやりましょう。
フォーラム(掲示板)ルール
・投稿するコードはできるだけ一つ、もしくは一つの関数を補助する複数の関数の形式にするか、
それだけをコンパイルして動くソースコード一式の形にしてください。
記事には説明だけを書き、コードは添付ファイルにしてもかまいません。
・使い方などの説明も書いてください。
環境に依存するコードの場合は、対象の環境も書いてください。
・使用条件(ライセンスなど)も書いていただけるとありがたいです。
・C言語、もしくはC++推奨ですが、他の言語でもかまいません。
・コードは正しくcodeタグで囲みましょう。
・一つのスレッドで一つのサンプルが基本です。
関連するサンプルの場合はまとめてもかまいません。
・投稿したサンプルを修正する場合には、スレッドの返信の形で投稿してください。
(新しいスレッドにしないでください。記事の編集でもかまいません)
返信
アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

【C++】HTTPでコンテンツを取得

#1

投稿記事 by みけCAT » 13年前

C++を使って、HTTPでテキストデータを取得します。
取得したデータは、std::string型で渡されます。

コード:

#include <windows.h>
#include <wininet.h>
#include <string>

int HttpGet(std::string& result,const char* url,const char* appname) {
	HINTERNET hinet,hurl;
	HANDLE hheap;
	char buf[10241];
	DWORD read;
	int total=0;
	int startpos;
	hinet=InternetOpen(appname,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
	if(hinet==NULL)return 0;
	hurl=InternetOpenUrl(hinet,url,NULL,0,0,0);
	if(hurl==NULL) {
		InternetCloseHandle(hinet);
		return 0;
	}
	hheap=HeapCreate(0,102400,0);
	if(hheap==NULL) {
		InternetCloseHandle(hinet);
		InternetCloseHandle(hurl);
		return 0;
	}
	result="";
	while(1) {
		InternetReadFile(hurl,buf,sizeof(buf)-1,&read);
		buf[read]=0;
		if(read==0)break;
		total+=read;
		result+=buf;
	}
	InternetCloseHandle(hinet);
	InternetCloseHandle(hurl);
	return 1;
}
resultに結果を格納するstd::string型変数を指定します。
urlに取得するURLを指定します。
appnameにアプリケーション名を指定します。(任意の文字列で構いません)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“サンプルを共有するコミュニティ” へ戻る