c++ - 如何为 session 中的多个放置请求重用相同的 HTTPS 连接?

标签 c++ web https put winhttp

为了将文件发送到服务器,我在 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);

该命令包针对每个应发送到服务器的文件运行。为每个要发送的文件从头开始建立连接会产生额外的开销。现在我正在寻找一种方法来减少这种开销。

所以我有两个问题:

  • 是否有必要为每个 put 请求打开和关闭新的 HTTPS 连接?
  • 有没有办法建立 session 并为该 session 中的许多放置请求重用相同的 HTTPS 连接?

最佳答案

答案如下:

  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);
    

关于c++ - 如何为 session 中的多个放置请求重用相同的 HTTPS 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690721/

相关文章:

c++ - 堆栈内存与堆内存

c++ - NAN 传播和 IEEE 754 标准

node.js - 如何将 NPM 配置为信任防火墙颁发者以进行 HTTPS 代理?

c++ - C++的依赖注入(inject)框架

c++ - Qt:如何固定 QTreeWidget 的列宽?

java - 为什么服务器上出现上传的未知文件?

html - 视差页面 html 和 css

css - 更好地理解 CSS 网格列 - 列,使用 float

http - HTTP 分析器如何工作?

ssl - 强制www。和 nginx.conf 中的 https (SSL)