为了将文件发送到服务器,我在 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 连接?
最佳答案
答案如下:
- 没有。一个连接可能会执行一堆请求。
这是代码草案:
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/