是否可以在TIdHTTPServer(Indy 9, Delphi 7)中处理PUT和DELETE请求?我尝试过OnCommandGet,但它只处理GET和POST请求。我也尝试了OnCommandOther事件。它处理PUT和PUT方法,但我不能访问发送的数据。我做错了什么?
2exbekwf1#
有可能吗?是的。但是,在Indy 9中,TIdHTTPServer只解析HEAD,GET和POST请求,并且只有在OnCommandGet事件被分配的情况下。如果OnCommandGet事件没有被分配,或者接收到不同的请求,TIdHTTPServer不解析请求(除了第一行以确定请求类型),而是触发OnCommandOther事件。正如您所注意到的,在该事件中没有提供TIdHTTPRequestInfo和TIdHTTPResponseInfo参数,因此您必须自己 * 手动 * 读取和解析整个请求,并根据需要使用AThread.Connection发送适当的回复以执行套接字I/O。阅读RFC 2616了解HTTP规范。也就是说,这在Indy 10中有所改变,其中TIdHTTPServerDOES为您处理所有解析,回复和套接字I/O,并且所有OnCommand...事件都有TIdHTTPRequestInfo和TIdHTTPResponseInfo参数。因此,您可以在OnCommandOther事件中轻松处理PUT和DELETE请求。在未来的版本中(很可能直到Indy 11),新的OnCommand...事件将为单个请求(OnCommandPut,OnCommandDelete等)添加,因此它们不再需要通过OnCommandGet或OnCommandOther进行漏斗。
TIdHTTPServer
HEAD
GET
POST
OnCommandGet
OnCommandOther
TIdHTTPRequestInfo
TIdHTTPResponseInfo
AThread.Connection
OnCommand...
PUT
DELETE
OnCommandPut
OnCommandDelete
jvidinwx2#
在Indy 10.6.2.0和 Delphi 10.4.2中,HTTP“命令”不会触发OnCommandGet事件,即使分配了。我只能通过OnCommandOther事件拦截HTTP“HTTP”。
2条答案
按热度按时间2exbekwf1#
有可能吗?是的。但是,在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
参数。因此,您可以在OnCommandOther
事件中轻松处理PUT
和DELETE
请求。在未来的版本中(很可能直到Indy 11),新的
OnCommand...
事件将为单个请求(OnCommandPut
,OnCommandDelete
等)添加,因此它们不再需要通过OnCommandGet
或OnCommandOther
进行漏斗。jvidinwx2#
在Indy 10.6.2.0和 Delphi 10.4.2中,HTTP“命令”不会触发OnCommandGet事件,即使分配了。我只能通过OnCommandOther事件拦截HTTP“HTTP”。