是否可以在TIdHTTPServer(Indy 9,Delphi 7)中处理PUT和DELETE请求?
我尝试过OnCommandGet,但它只处理GET和POST请求。
我也尝试过OnCommandOther事件。它处理PUT和DELETE方法,但我无法访问发送的数据。
我做错了什么?
答案 0 :(得分:3)
可能吗?是。但是,Indy 9中的TIdHTTPServer
仅解析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
进行投放。
答案 1 :(得分:0)
在 Indy 10.6.2.0 和 Delphi 10.4.2 中,如果已分配 HTTP“DELETE”命令也不会触发 OnCommandGet 事件。我只能使用 OnCommandOther 事件拦截 HTTP“DELETE”。