IndyのTIdHTTPコンポーネントでWebサーバーにアクセスする方法を紹介します。
Webサーバーにアクセスするには、TIdHTTPを使います。
フォームにTIdHttpコンポーネントを配置します。
TMemoryStream* ms = new TMemoryStream(); //取得したデータを格納する
IdHTTP1->Get("http://www.google.co.jp/", ms);
//取得したデータをTMemoに表示
ms->Position = 0;
Memo1->Lines->LoadFromStream(ms.get(), TEncoding::UTF8); //文字コードUTF-8
取得したデータはバイト列です。
文字列に変換する時は、文字コードにあわせて、適切に変換する必要があります。
//文字コードがUTF-8の場合
UTF8String s = reinterpret_cast<char*>(ms->Memory);
//文字コードがShift_JISの場合
AnsiStringT<932> s = reinterpret_cast<char*>(ms->Memory);
//文字コードがEUC_JPの場合
AnsiStringT<20932> s = reinterpret_cast<char*>(ms->Memory);
IndyのReadStringFromStream関数を使って変換することもできます。
//文字コードがUTF-8の場合
UnicodeString s = ReadStringFromStream(ms.get(), ms->Size, TEncoding::UTF8);
文字コードがわからない場合は、判別する必要があります。
文字コードを判別する方法については「文字コードを判別する」をご覧ください。
サーバーにアクセスした結果をファイルに保存する
TFileStream* fs = new TFileStream("C:\\test.txt", fmCreate | fmOpenWrite);
IdHTTP1->Get("http://www.google.co.jp/", fs);
//パラメータ
TStringList* params = new TStringList();
params->Values["q"] = "value";
TMemoryStream* ms = new TMemoryStream();
IdHTTP1->Post("http://localhost/test.cgi", params, ms);
TIdSSLIOHandlerSocketOpenSSLコンポーネントを配置し、TIdHttpコンポーネントのIOHanderプロパティに設定します。
SSL DLLを「http://indy.fulgan.com/SSL/」からダウンロードし、libeay32.dllとssleay32.dllを実行プログラムと同じフォルダーに配置します。
後は、普通にアクセスします。
TMemoryStream* ms = new TMemoryStream();
IdHTTP1->Get("https://〜", ms);
//パラメータ
TStringList* params = new TStringList();
params->Values["q"] = "テスト";
//Cookieを設定する
IdHTTP1->Request->CustomHeaders->Add("Cookie:MyName=MyValue");
TMemoryStream* ms = new TMemoryStream();
IdHTTP1->Post("http://localhost/index.php", params, ms);
サーバーから送られてきたCookieを受信するにはTIdCookieManagerコンポーネントを使用します。
フォームにTIdCookieManagerを配置します。
TIdHttpコンポーネントのCookieManagerにTIdCookieManagerを設定します。
//サーバーにリクエストを送信
TMemoryStream* ms = new TMemoryStream();
IdHTTP1->Post("http://localhost/index.php", ms);
//Cookieを一つずつ処理
for (int i = 0; i < IdCookieManager1->CookieCollection->Count; ++i)
{
TIdNetscapeCookie* cookie = IdCookieManager1->CookieCollection->Items[i];
UnicodeString name = cookie->CookieName;
UnicodeString text = cookie->CookieText;
UnicodeString domain = cookie->Domain;
TDateTime expires = cookie->Expires;
UnicodeString path = cookie->Path;
//Cookieを処理する
}
ファイルをアップロードするにはTIdMultiPartFormDataStreamを使用します。
TIdMultiPartFormDataStream* source = new TIdMultiPartFormDataStream();
source->AddFile("file", "C:\test\sample.jpg", "image/jpeg");
AddFileメソッド引数は次のようになります。
ファイルをアップロードするプログラムは次のようになります。
TIdMultiPartFormDataStream* source = new TIdMultiPartFormDataStream();
source->AddFile("file", "C:\test\sample.jpg", "image/jpeg");
TMemoryStream* response = new TMemoryStream();
IdHTTP1->Post("http://localhost/test/upload.php", source, response);
2011年2月6日
2011年4月13日
2012年7月17日