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

时间:2011-01-30 12:48:41

标签: delphi indy

我正在使用Indy idHTTP对象从服务器请求XML数据。请求完成后,服务器发送回复,我可以读取回复标题OK: 结果:= IdHTTP1.Response.ResponseText;

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

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

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

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

  

6回复

     

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

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

我正在使用Delphi XE和Indy 10.5.7

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

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