【发布时间】:2016-12-09 17:22:17
【问题描述】:
我有一个工具,它可以针对具有相同标题、相同帖子正文等的相同 URL 执行 HTTPS POST 命令多次迭代。
我遇到的是,对于某些测试人员来说,WinHttpSendRequest() 函数经常失败,随后对 GetLastError() 的调用返回 SEC_E_BUFFER_TOO_SMALL (0x80090321),记录在此处:COM Error Codes (Security and Setup)。
这不是 WinHttpSendRequest() 的记录错误代码,并且相当广泛的谷歌搜索根本没有发现任何东西。
我已经四次检查了我提供的 WinHttpSendRequest() 输入是否正确且有效,并且这些输入连续工作了数万次......直到它没有。
我无法提供 MVCE,但根据此处提供的假设,我正在寻找错误代码返回的任何可能原因。
【问题讨论】:
-
“我无法提供 MVCE”(最小可验证代码示例)。
-
由于您正在发出 secure HTTP 请求,并且遇到 security 错误,很可能
WinHttpSendRequest()本身在内部提供用于加密 HTTP 流量的安全 API 的数据缓冲区不足。这可能不是你的错。虽然很难确定,因为您没有显示任何代码.. -
谢谢@RemyLebeau,这也是我的怀疑。我见过的最相关的解释在这里:github.com/dblock/waffle/pull/128(请参阅“wbond”用户在 2015 年 12 月 9 日发表的评论)。我怀疑 WinHttpSendRequest() 在内部调用 InitializeSecurityContext() 并接收 SEC_E_BUFFER_TOO_SMALL 但未处理它。我最好的选择可能是检测到该错误,然后再次尝试调用 WinHttpSendRequest(),因为后续尝试很可能会起作用。