如何中止使用 wininet 发送的请求?

Posted

技术标签:

【中文标题】如何中止使用 wininet 发送的请求?【英文标题】:How can I abort a request sent using wininet? 【发布时间】:2013-09-30 08:43:29 【问题描述】:

我有一个 MFC 应用程序,用于向相应的服务器发送一个发布请求。 这是一个http请求,用于上传文件。

但是需要中止发送的请求。就像用户正在发送一个大文件并且用户应该能够在请求完成之前取消它。

我正在使用 wininet api, HttpSendRequestExInternetWriteFileHttpEndRequest 用于此。 但是一旦发送请求,除非请求完成或超时,否则我无法在两者之间中止它。

请任何人提出取消处理或发送请求的选项。

我尝试了closing the request handles,但请求仍然没有中止。

任何人请帮助.. 提前致谢

【问题讨论】:

“中止”是什么意思?如果您的意思是“在提交所有数据并且服务器已启动其处理后强制服务器停止处理请求”,那么 HTTP 协议中没有任何内容支持这一点。您可以关闭句柄从而断开连接,但服务器上的处理可能会继续 - 它只是无法将响应发送回给您。 您找到解决方案了吗?我有同样的问题。我已经启动了一个阻塞 HttpSendRequest 的线程。我希望能够根据用户输入取消请求。 【参考方案1】:

从客户端的角度来看,您只能使用InternetCloseHandle 例程中止/断开当前操作。 从客户端的角度来看,这将立即中止请求/操作,因此用户可以继续执行另一个操作。

但是当数据已经发送到服务器时,这只会导致收不到响应!

正如 Igor 所说,一旦发送了完整的请求(数据)(此时客户端只是等待从服务器接收数据),您就不能中止服务器的处理。

因此,您需要通过使用第一个响应从客户端向服务器发送新的“删除”请求来查看要取消“发送”请求或在服务器上恢复文件添加的点请求(此响应应包含有关添加的文件的信息 - 就像一个密钥)。

【讨论】:

以上是关于如何中止使用 wininet 发送的请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中使用 wininet 创建 POST 请求

使用 Wininet 发送多个 Http 请求

在 C++ 中使用 Wininet 发送 POST 请求时的编码问题

使用wininet的异步请求

如何使用 node.js/express 中止请求?

WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?