2

是否可以在 TIdHTTPServer(Indy 9、Delphi 7)中处理 PUT 和 DELETE 请求?

我试过 OnCommandGet 但它只处理 GET 和 POST 请求。

我也尝试过 OnCommandOther 事件。它处理 PUT 和 DELETE 方法,但我无法访问发送的数据。

我做错了什么?

4

2 回答 2

3

可能吗?是的。但是,TIdHTTPServer在 Indy 9 中,仅在分配事件时才HEAD解析和GET请求POSTOnCommandGet如果OnCommandGet未分配事件,或收到不同的请求,则根本TIdHTTPServer 解析请求(确定请求类型的第一行除外),OnCommandOther而是触发事件。正如您所注意到的,该事件中没有提供TIdHTTPRequestInfoTIdHTTPResponseInfo参数,因此您必须自己手动读取和解析整个请求,并自己发送适当的回复,AThread.Connection用于根据需要执行套接字 I/O。阅读RFC 2616以了解 HTTP 规范。

这在 Indy 10 中有所改变,其中TIdHTTPServer DOES为您处理所有解析、回复和套接字 I/O,并且所有事件OnCommand...都有参数。TIdHTTPRequestInfoTIdHTTPResponseInfo

在未来的版本中(很可能直到 Indy 11),OnCommand...将为单个请求( 、 等)添加新事件OnCommandPutOnCommandDelete因此它们不必全部通过OnCommandGetOnCommandOther不再通过。

于 2014-06-06T22:00:53.753 回答
0

对于 Indy 10.6.2.0 和 Delphi 10.4.2,如果分配了 HTTP“DELETE”命令,也不会触发 OnCommandGet 事件。我只能使用 OnCommandOther 事件拦截 HTTP“DELETE”。

于 2021-05-31T17:39:59.363 回答