Обработка запросов PUT и DELETE в TIdHTTPServer в Delphi 7
Можно ли обрабатывать запросы PUT и DELETE в TIdHTTPServer (Indy 9, Delphi 7)?
Я пробовал OnCommandGet, но он обрабатывает запросы GET и POST.
Также я попробовал событие OnCommandOther. Он обрабатывает методы PUT и DELETE, но я не могу получить доступ к отправленным данным.
Что я делаю не так?
2 ответа
Это возможно? Да. Тем не мение, TIdHTTPServer
в Indy 9 только разборы HEAD
, GET
а также POST
запросы, и только если OnCommandGet
событие назначено. Если OnCommandGet
событие не назначено, или получен другой запрос, TIdHTTPServer
НЕ анализирует запрос вообще (кроме первой строки, чтобы определить тип запроса), и вызывает OnCommandOther
событие вместо Как вы заметили, нет TIdHTTPRequestInfo
а также TIdHTTPResponseInfo
параметры, предоставленные в этом событии, поэтому вы должны вручную прочитать и проанализировать весь запрос, а также отправить соответствующий ответ самостоятельно, используя AThread.Connection
выполнить сокет ввода / вывода по мере необходимости. Прочитайте RFC 2616 для спецификации HTTP.
Это было изменено в Indy 10, где TIdHTTPServer
ДЕЙСТВИТЕЛЬНО обрабатывает все разбор, ответ и ввод-вывод сокета для вас, и все OnCommand...
события имеют TIdHTTPRequestInfo
а также TIdHTTPResponseInfo
параметры.
В будущем выпуске (скорее всего, не до Indy 11), новый OnCommand...
события будут добавляться по индивидуальным запросам (OnCommandPut
, OnCommandDelete
и т. д.), чтобы они не все проходили через OnCommandGet
или же OnCommandOther
больше.
В Indy 10.6.2.0 и Delphi 10.4.2 команда HTTP «DELETE» не запускает событие OnCommandGet, даже если оно назначено. Я могу перехватить HTTP «DELETE» только с событием OnCommandOther.