Delphi - 使用 Indy HTTP 客户端将响应发送回服务器

标签 delphi indy

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

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

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

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

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

6 Response

"After receiving and interpreting a request message, a server responds with an HTTP response message."

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

我使用的是 Delphi XE 和 Indy 10.5.7

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

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

最佳答案

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

发送数据流直到连接关闭符合HTTP标准,HTTP是一种请求-响应协议(protocol)。如果客户端收到数据作为响应,则它无法回复自己的响应 - 客户端只能发送另一个请求。因此,您的任务是弄清楚服务器会接受什么样的请求作为数据接收的确认。一旦你明白了这一点,你将能够发现如何(如果)使用 IdHTTP 实现这一点。

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

关于Delphi - 使用 Indy HTTP 客户端将响应发送回服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842954/

相关文章:

delphi - Delphi 7 中的 Indy 10.6.2 idFTP - 接收文件时文件名中的 native 符号问题 - 可能是 DefStringEncoding 的不良行为

delphi - 为什么我必须发送两个连续的 HTTP Get 请求才能进行身份验证?

delphi - Indy 10 TCP 服务器

Delphi发送TObjectList之类的var参数

mysql - FireDAC GetTableNames MySQL

delphi - 调试 Delphi Firemonkey Indy TCP 服务器

delphi - TCameraComponent 和 TVideoCaptureDevice 未在 Win32 中初始化

algorithm - 对于快速稳定的指针数组排序,哪种算法是正确的?

delphi - 作为函数结果的属性具有空属性值?

c# - 从delphi读取二进制文件