C++ HTTP post不等待响应

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

使用Indy的
TIdHTTP
组件,我想在不等待服务器响应的情况下执行
POST
操作。我使用的正常功能是:

IdHTTP1->Post(sURL, reqStream, resStream);

但是我想跳过响应以节省时间,这样
Post()
退出速度更快。我该怎么做?

HTTP是一种请求/响应协议
TIdHTTP
设计为遵循该协议,这意味着其请求方法总是在退出之前读取完整响应

也就是说,你有两个选择来实现你想要的:

  • TIdHTTP
    正常读取响应,但不要将其保存在任何地方。您可以使用一个响应
    TStream
    ,该响应丢弃写入它的任何字节(例如
    TIdEventStream
    ,而不使用
    OnWrite
    事件处理程序),或者如果您使用的是最新版本的Indy,您可以简单地将响应流设置为
    NULL

    IdHTTP1->Post(sURL, reqStream, (TStream*)NULL);
    
    显然,这至少还有从套接字读取完整响应的开销

  • 使用
    TIdHTTP::OnHeadersAvailable
    事件检查当前
    响应
    状态代码。当接收到最终(非重定向、非授权)状态代码时,通过抛出异常(例如通过调用
    Sysutils::abort()
    )中止响应处理,该异常将绕过读取响应正文。如果
    TIdHTTP
    没有自动为您关闭底层套接字,请确保在
    TIdHTTP::Post()退出后关闭底层套接字。或者,您可以关闭套接字而不是抛出您自己的异常,并让
    TIdHTTP
    在无法从套接字读取响应正文时抛出自己的异常。无论哪种方式,最终效果都是一样的

我为您在Indy的问题跟踪程序中添加了一个新的功能请求,以便在Indy的未来版本中更好地解决此问题:


我不在乎回复,不管帖子成功与否,我不知道你在说什么。什么是
IdHTTP1
?你说的“跳过回答”是什么意思?@Omar我仍然记得我还是初学者的时候,我很难知道我使用的哪些东西属于语言标准,哪些是第三方,所以我可以联系起来。也就是说,不管<代码> IDHTTP1是什么,它不是C++的一部分。它可能是用C++编写的,它可能是用一些C++ IDE(你提到的东西叫做C++ Builder)来进行的,但是不是每个精通C++的人都知道C++的每第三方工具。为了让我们能够帮助您,也为了让那些知道您正在使用哪些工具来查看您的问题的人,请描述您正在使用哪些工具,并为您的问题添加有用的标记。如果发布成功与否无关紧要,那么最快的选择就是根本不发布。@Caleb显然OP希望将数据发布到服务器,他只是不想等待回应。最快的选择是根本不使用
TIdHTTP
。只需直接下拉到TCP层。创建一个套接字,向其写入一些基本的HTTP请求头,向其写入post数据,然后断开连接。