在 Delphi 7中处理TIdHTTPServer中的PUT和PUTR请求

scyqe7ek  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(271)

是否可以在TIdHTTPServer(Indy 9, Delphi 7)中处理PUT和DELETE请求?
我尝试过OnCommandGet,但它只处理GET和POST请求。
我也尝试了OnCommandOther事件。它处理PUT和PUT方法,但我不能访问发送的数据。
我做错了什么?

2exbekwf

2exbekwf1#

有可能吗?是的。但是,在Indy 9中,TIdHTTPServer只解析HEADGETPOST请求,并且只有在OnCommandGet事件被分配的情况下。如果OnCommandGet事件没有被分配,或者接收到不同的请求,TIdHTTPServer解析请求(除了第一行以确定请求类型),而是触发OnCommandOther事件。正如您所注意到的,在该事件中没有提供TIdHTTPRequestInfoTIdHTTPResponseInfo参数,因此您必须自己 * 手动 * 读取和解析整个请求,并根据需要使用AThread.Connection发送适当的回复以执行套接字I/O。阅读RFC 2616了解HTTP规范。
也就是说,这在Indy 10中有所改变,其中TIdHTTPServerDOES为您处理所有解析,回复和套接字I/O,并且所有OnCommand...事件都有TIdHTTPRequestInfoTIdHTTPResponseInfo参数。因此,您可以在OnCommandOther事件中轻松处理PUTDELETE请求。
在未来的版本中(很可能直到Indy 11),新的OnCommand...事件将为单个请求(OnCommandPutOnCommandDelete等)添加,因此它们不再需要通过OnCommandGetOnCommandOther进行漏斗。

jvidinwx

jvidinwx2#

在Indy 10.6.2.0和 Delphi 10.4.2中,HTTP“命令”不会触发OnCommandGet事件,即使分配了。我只能通过OnCommandOther事件拦截HTTP“HTTP”。

相关问题