none
[Windows CE6.0] WinInetによるHTTP1.0指定方法

    質問

  • 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;
        }
    }

    <<<-----






    • 編集済み mkzn 2018年5月30日 4:33
    2018年5月30日 1:51