WinInetを使用してHTTP通信のクライアント側のテストプログラムを作成しています。
HTTPのバージョンはHTTP1.0を指定しているはずなのですが、
サーバのパケットキャプチャでは、クライアントからHTTP/1.1でパケットが送信されております。
MSDNでは、HttpOpenRequest()の第4引数にNULLを設定することで「HTTP/1.0」になる
記載ありますが、そのような挙動にはなっておりません。
ttps://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms906346(v=msdn.10)
Windows CE6.0で、WinInetを使用してHTTP1.0でHTTP通信する方法をご教授いただけないでしょうか。
[開発環境]Visual Studio2008, Windows CE 6.0 R3
[開発言語]C言語
以下試してみたことです。
・HttpOpenRequest()の第4引数にNULLを設定
・HttpOpenRequest()の第4引数にHTTP_VERSION(_T("HTTP/1.0"))を設定
・オプション「INTERNET_OPTION_HTTP_VERSION」の値がHTTP1.1だったのでHTTP1.0を設定
・HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\EnableHttp1_1
に0を設定
WinInetによるHTTPオープン処理の抜粋を以下に記載します。
実装に誤りがありましたらご指摘よろしくお願い致します。
------>>>
void HttpOpen(TCHAR* hostName, DWORD port, TCHAR* verb, TCHAR* reqUri)
{
// WinInetの初期化.
m_hInternet = InternetOpen(
_T("HTTP-Agent"),
// INTERNET_OPEN_TYPE_PRECONFIG, //接続方法
INTERNET_OPEN_TYPE_DIRECT,
NULL,
NULL,
0 );
if(m_hInternet == NULL)
{
/* Error */
Logging(_T("InternetOpen() FAIL err=%08X"), GetLastError());
goto END_PROC;
}
Logging(_T("InternetOpen() SUCCESS"));
// 指定のサーバに接続.
m_hSession = InternetConnect(m_hInternet, //InternetOpen 関数で取得したハンドル
hostName,
(INTERNET_PORT)port,
NULL,
NULL,
INTERNET_SERVICE_HTTP,
0,
INTERNET_NO_CALLBACK );
if(m_hSession == NULL)
{
/* Error */
Logging(_T("InternetConnect() FAIL err=%08X"), GetLastError());
goto END_PROC;
}
Logging(_T("InternetConnect() SUCCESS host=%s, port=%d"), hostName, port);
wRequestFlag =
INTERNET_FLAG_RELOAD | // キャッシュ無視、サーバ強制DL
INTERNET_FLAG_DONT_CACHE | // DL結果をキャッシュに追加しない
INTERNET_FLAG_NO_AUTO_REDIRECT; // リダイレクトしない
// HTTPリクエストの作成.
m_hRequest = HttpOpenRequest(m_hSession, //InternetConnect の時の戻り値
verb,
//GET/POST
reqUri,
//ドメイン名を除いた HTTP サーバ上のパス
// HTTP_VERSION, // リクエストのHTTPバージョン
NULL,
// リクエストのHTTPバージョン
NULL,
// lpszObjectNameまでのパス
NULL,
// アクセス種別
wRequestFlag,
//ダウンロード方法
INTERNET_NO_CALLBACK );
if(m_hRequest == NULL)
{
/* Error */
Logging(_T("HttpOpenRequest() FAIL err=%08X"), GetLastError());
goto END_PROC;
}
}
<<<-----