C++ HTTP post不等待响应
使用Indy的C++ HTTP post不等待响应,c++,c++builder,indy,idhttp,C++,C++builder,Indy,Idhttp,使用Indy的TIdHTTP组件,我想在不等待服务器响应的情况下执行POST操作。我使用的正常功能是: IdHTTP1->Post(sURL, reqStream, resStream); 但是我想跳过响应以节省时间,这样Post()退出速度更快。我该怎么做?HTTP是一种请求/响应协议TIdHTTP设计为遵循该协议,这意味着其请求方法总是在退出之前读取完整响应 也就是说,你有两个选择来实现你想要的: 让TIdHTTP正常读取响应,但不要将其保存在任何地方。您可以使用一个响应TStre
TIdHTTP
组件,我想在不等待服务器响应的情况下执行POST
操作。我使用的正常功能是:
IdHTTP1->Post(sURL, reqStream, resStream);
但是我想跳过响应以节省时间,这样
Post()
退出速度更快。我该怎么做?HTTP是一种请求/响应协议TIdHTTP
设计为遵循该协议,这意味着其请求方法总是在退出之前读取完整响应
也就是说,你有两个选择来实现你想要的:
- 让
正常读取响应,但不要将其保存在任何地方。您可以使用一个响应TIdHTTP
,该响应丢弃写入它的任何字节(例如TStream
,而不使用TIdEventStream
事件处理程序),或者如果您使用的是最新版本的Indy,您可以简单地将响应流设置为OnWrite
NULL
显然,这至少还有从套接字读取完整响应的开销IdHTTP1->Post(sURL, reqStream, (TStream*)NULL);
- 使用
事件检查当前TIdHTTP::OnHeadersAvailable
状态代码。当接收到最终(非重定向、非授权)状态代码时,通过抛出异常(例如通过调用响应
)中止响应处理,该异常将绕过读取响应正文。如果Sysutils::abort()
没有自动为您关闭底层套接字,请确保在TIdHTTP
TIdHTTP::Post()退出后关闭底层套接字。或者,您可以关闭套接字而不是抛出您自己的异常,并让
在无法从套接字读取响应正文时抛出自己的异常。无论哪种方式,最终效果都是一样的TIdHTTP
我不在乎回复,不管帖子成功与否,我不知道你在说什么。什么是
IdHTTP1
?你说的“跳过回答”是什么意思?@Omar我仍然记得我还是初学者的时候,我很难知道我使用的哪些东西属于语言标准,哪些是第三方,所以我可以联系起来。也就是说,不管<代码> IDHTTP1是什么,它不是C++的一部分。它可能是用C++编写的,它可能是用一些C++ IDE(你提到的东西叫做C++ Builder)来进行的,但是不是每个精通C++的人都知道C++的每第三方工具。为了让我们能够帮助您,也为了让那些知道您正在使用哪些工具来查看您的问题的人,请描述您正在使用哪些工具,并为您的问题添加有用的标记。如果发布成功与否无关紧要,那么最快的选择就是根本不发布。@Caleb显然OP希望将数据发布到服务器,他只是不想等待回应。最快的选择是根本不使用TIdHTTP
。只需直接下拉到TCP层。创建一个套接字,向其写入一些基本的HTTP请求头,向其写入post数据,然后断开连接。