繁体   English   中英

Delphi - 使用Indy HTTP Client将响应发送回服务器

[英]Delphi - Using Indy HTTP Client to send a response back to a server

我正在使用Indy idHTTP对象从服务器请求XML数据。 一旦发出请求,服务器就会发送一个回复,我可以读取回复标题OK:result:= IdHTTP1.Response.ResponseText;

然后,他们的系统继续定期发送未经请求的XML数据,直到预定的超时时间到期。

但是,客户现在希望我的客户端应用程序在每次接收数据时都向他们发送HTTP响应(基于成功解析XML的响应)。

如果我是服务器,我可以弄清楚如何发送响应,但是我如何生成响应头并使用我的idHTTP1客户端发布(或放置,发送等)只是标头。

这是我认为,在RFC 2616中没有完全定义,因为服务器通常发送HTTP响应,而不是客户端,即:

6回应

“在接收并解释请求消息后,服务器会响应HTTP响应消息。”

我以为我可以使用TIdHTTPResponseInfo并使用WriteHeader方法,但是如果我是客户端,则无法解决如何设置与我需要回复的URL的链接。

我正在使用Delphi XE和Indy 10.5.7

我尝试了很多方法,但都没有成功。

任何帮助或可能的代码示例都非常感谢!

您的问题可以分为两部分:(a)我必须将哪些数据发送到服务器以通知服务器,以及(b)如何使用IdHTTP发送此数据。

在连接关闭之前发送数据流对应于HTTP标准,而HTTP是请求 - 响应协议。 如果客户端接收数据作为响应,则它无法使用自己的响应进行回复 - 客户端只能发送另一个请求。 所以你的任务是找出服务器接受什么样的请求作为数据接收的确认。 一旦你想到这一点,你将能够找到如何(如果)使用IdHTTP。

更新:如果您应该向服务器发送200 OK,那么这不符合HTTP协议规范。 您可以尝试访问HTTP客户端后面的套接字,只发送7个字节(200 OK + CRLF)。

如果服务器希望客户端发送每个XML回复的确认,则服务器不会实现实际的HTTP协议,因为这是不允许的行为。 更有可能的是,他们正在实现自己的自定义协议,模仿但不是HTTP。 例如,SIP具有许多类似于HTTP的特征,而许多特征不是(例如,对单个请求的多个答复)。

您需要找出服务器实际执行的协议类型。 您将无法使用TIdHTTP 请直接使用TIdTCPClient 然后,您可以根据需要发送和接收数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM