2

ファイルをサーバーに送信するには、Windows で HTTPS put 要求を実行します。これは次のようになります。

hSession = WinHttpOpen(  L"Agent/1.0",..
hConnect = WinHttpConnect(hSession,..
hRequest = WinHttpOpenRequest( hConnect, L"PUT",..
WinHttpSetCredentials(hRequest,..
WinHttpAddRequestHeaders( hRequest,..
WinHttpSendRequest( hRequest,..
WinHttpWriteData(hRequest,..
WinHttpReceiveResponse(hRequest,..
WinHttpQueryHeaders(hRequest,..
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);

このコマンドのパックは、サーバーに送信する必要があるすべてのファイルに対して実行されます。送信するすべてのファイルに対して最初から接続を確立すると、追加のオーバーヘッドが発生します。今、私はこのオーバーヘッドを減らす方法を探しています。

だから私は2つの質問があります:

  • put リクエストごとに新しい HTTPS 接続を開いたり閉じたりする必要がありますか?
  • セッションを確立し、このセッション内の多数の put リクエストに対して同じ HTTPS 接続を再利用する方法はありますか?
4

1 に答える 1

2

答えは次のとおりです。

  1. いいえ。1 つの接続で多数のリクエストが実行される場合があります。
  2. これはコードのドラフトです:

    hSession = WinHttpOpen( L"Agent/1.0",..
    hConnect = WinHttpConnect(hSession,.. 
    for (all_files_to_upload) { 
        hRequest = WinHttpOpenRequest( hConnect, L"PUT",..
        WinHttpSetCredentials(hRequest,.. 
        WinHttpAddRequestHeaders( hRequest,.. 
        WinHttpSendRequest( hRequest,.. 
        WinHttpWriteData(hRequest,.. 
        WinHttpReceiveResponse(hRequest,.. 
        WinHttpQueryHeaders(hRequest,.. 
        WinHttpCloseHandle(hRequest);
    } 
    
    if (hConnect) WinHttpCloseHandle(hConnect);
    if (hSession) WinHttpCloseHandle(hSession);
    
于 2012-12-07T00:54:07.567 に答える