是否可以在 TIdHTTPServer(Indy 9、Delphi 7)中处理 PUT 和 DELETE 请求?
我试过 OnCommandGet 但它只处理 GET 和 POST 请求。
我也尝试过 OnCommandOther 事件。它处理 PUT 和 DELETE 方法,但我无法访问发送的数据。
我做错了什么?
有可能吗?是的。但是,TIdHTTPServer
在 Indy 9 中,仅在分配事件时才HEAD
解析和GET
请求POST
。OnCommandGet
如果OnCommandGet
未分配事件,或收到不同的请求,则根本TIdHTTPServer
不解析请求(确定请求类型的第一行除外),OnCommandOther
而是触发事件。正如您所注意到的,该事件中没有提供TIdHTTPRequestInfo
和TIdHTTPResponseInfo
参数,因此您必须自己手动读取和解析整个请求,并自己发送适当的回复,AThread.Connection
用于根据需要执行套接字 I/O。阅读RFC 2616以了解 HTTP 规范。
这在 Indy 10 中有所改变,其中TIdHTTPServer
DOES为您处理所有解析、回复和套接字 I/O,并且所有事件OnCommand...
都有参数。TIdHTTPRequestInfo
TIdHTTPResponseInfo
在未来的版本中(很可能直到 Indy 11),OnCommand...
将为单个请求( 、 等)添加新事件OnCommandPut
,OnCommandDelete
因此它们不必全部通过OnCommandGet
或OnCommandOther
不再通过。
对于 Indy 10.6.2.0 和 Delphi 10.4.2,如果分配了 HTTP“DELETE”命令,也不会触发 OnCommandGet 事件。我只能使用 OnCommandOther 事件拦截 HTTP“DELETE”。