Обработка запросов 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.

Другие вопросы по тегам