2024 11,28 05:41 |
|
2008 12,13 12:29 |
|
InternetConnect で取得したハンドル hConnect を使って色々な要求を出します。
その要求の方式”GET”、”POST”だとかを lpszVerb に、サーバー側のどのオブジェクトに対するリクエストかを lpszObjectName に記述してゆきます。”GET" Method を指定している場合には - サーバー側のどのプログラムを起動し、?でSymbol=Value の形でプログラムに渡すパラメータとその値を記述します。urlencode する必要がありますが StockPrice&Chart では渡すフォーマットが決まっていますから”/”、”:”は直接”%2F”とか”%3A”として設定しています。 PPC、WMでは内部は Widechar が標準のため Multibyte に変換しています。 RequestHeader に指定する情報を一度に複数指定できないので、HttpAddRequestHeaders で一つずつ指定してゆきます。ここでは指定する文字列は"\r\n"のペアで終端する必要があります。 "Accept-Encoding: gzip, inflate\r\n" はデバイスの”¥Windows”の下に zlib1.dll がある場合、gzip、inflate のフォーマットで圧縮して送るよう指示するための指定です。 zlib を使った解凍が今朝4:00前に動くようになったので別トピックに書きます。 ”POST” method を指示した場合のパラメータは HttpSendRequest の lpOptional に "Symbol=Value" で記述して”&”でつないで一つの文字列にして渡します。ここでもurlencodeが必要です。 一つのリクエストが終わって結果をすべて受け取ると次のリクエストを投げます。ただ次のリクエストを投げる前に一旦 hRequest をクローズしないとサーバーの応答がなかったのでクローズを毎回挟んでいます。 正常にリクエストを出して正常に結果を受け取っている間はリクエストを投げてクローズの繰り返しですが、エラーを検出した場合や回線の切断を行った場合 "InternetOpen" から実行するようにしています。 ”POST”の場合に必要なパラメータは Fiddler2 を使ってIEの実際のページからデータを取得して見つけています。 ソースです。 /*********************************************************************** // Wide to ANSI // Format them } else { // Match lpszOpt[0] = "__VIEWSTATE=%2FwEPDwUKMTE2MTU4MjY1MA8WBB4TSGlzdG9yaWNUYWJsZVBhZ2VOb2YeGEhpc3RvcmljVGFibGVNYXhQYWdlU2l6ZQICFgJmD2QWAgIDD2QWCmYPZBYCZg9kFgQCAw8PZBYCHgZvbmJsdXIFFFNlbGVjdFByaWNlc0J1dHRvbigpZAIFDxYCHglpbm5lcmh0bWwF6AE8YSBocmVmPSJodHRwOi8vanAubW9uZXljZW50cmFsLm1zbi5jb20vc2hhcmVkc3RvY2svYWRkdG9zaHN0b2NrLmFzcD9TeW1ib2xzPUpQOjEwMDAwMDAxOCZydT1odHRwJTNhJTJmJTJmanAubW9uZXljZW50cmFsLm1zbi5jb20lMmZpbnZlc3RvciUyZmNoYXJ0cyUyZmhpc3RvcmljZGF0YS5hc3B4JTNmU3ltYm9sJTNkSlAlM2ExMDAwMDAwMTgiPuODneODvOODiOODleOCqeODquOCquOBq%2Bi%2FveWKoDwvYT4gZAIBDxYCHgdWaXNpYmxlaGQCAg9kFgJmD2QWAgIBDw8WAh4EVGV4dGVkZAIDD2QWAmYPZBYCAgEPFgIfBGcWBGYPZBYCZg9kFgICAQ8PFgIfBQUe5pel57WMIDIyNTog5pmC57O75YiX44OH44O844K%2FZGQCAQ9kFgJmD2QWAgIBDw8WAh8FBVPoqK3lrprjgZfjgZ%2FmnJ%2FplpPjga4g5qCq5L6h44Gu5pmC57O75YiX44OH44O844K%2F44KSIOOBlOWPgueFp%2BOBhOOBn%2BOBoOOBkeOBvuOBmeOAgmRkAgQPZBYCZg9kFgICAQ8WAh8EZxYCAgEPZBYCZg9kFgwCAw8QD2QWAh4Hb25jbGljawUYRGlzYWJsZUludGVydmFsT3B0aW9ucygpZGRkAgUPZBYCZg8QD2QWAh4Ib25jaGFuZ2UFDlNlbGVjdEN1c3RvbSgpZBYBAgFkAgcPD2QWAh4Hb25mb2N1cwUZU2VsZWN0Q3VzdG9tUmFkaW9CdXR0b24oKWQCCQ8PFgIfBQUQJm5ic3A7WVlZWS9NTS9ERGRkAgsPD2QWAh8IBRlTZWxlY3RDdXN0b21SYWRpb0J1dHRvbigpZAINDw8WAh8FBRAmbmJzcDtZWVlZL01NL0REZGRkkaldBWJ8jvSKL%2FSPxhmWhvAju1Q%3D"; int i; /*********************************************************************** //********************************************** // "GET" (1 month history data) or "POST" (others) // Prepare stockID and CountryID for ObjectName to kick. if (!wcscmp(lpszCountry, L"/")) { // Foreign Exchange } else if (!wcscmp(lpszCountry, L"A")) { // Mutual Funds } else { }
// Prepare Accept-Types. DWORD dwFlags = INTERNET_FLAG_RELOAD | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_CACHE_WRITE; // Close Event and Inet handles return FALSE; } else { wsprintf(szBuf, L"Asynch Inet: WaitForSingleObj(OpenReq) AsyncRes:%d ", pAsyncRes->dwError); // Close Event and Inet handles return FALSE; //********************************************** if (s_hInstzlib) lpszHeaders[iNoOfHeaders++] = L"Accept-Language: ja\r\n"; int i; //********************************************** // if ((uSpec == 0) || (uSpec == 1)) { // Get Quote or 1 Month History page by "GET" Method } else { // Get 3 Months History page by "POST" Method Prepare_symbols( dwOptionalLength = strlen(Optional); } bResult = HttpSendRequest( if (!bResult) { // Close Event and Inet handles return FALSE; } else { wsprintf(szBuf, L"Asynch Inet: WaitForSingleObj(SendReq) AsyncRes:%d ", pAsyncRes->dwError); // Close Event and Inet handles return FALSE; PR |
|
コメント |
コメント投稿 |
|
trackback |
トラックバックURL |
忍者ブログ [PR] |