TIdHTTP
в Indy 8 просто не поддерживает PUT
запросы. Он поддерживает только запросы HEAD
, GET
и POST
. И, к сожалению, вы не можете принудительно выполнить запрос PUT
вручную (без изменения исходного кода Indy), так как метод TIdHTTP.DoRequest()
принимает перечисление TIdHTTPMethod
, которое определяет только эти 3 HTTP-запроса.
В Indy 9 добавлена поддержка дополнительных HTTP-запросов: OPTIONS
, TRACE
, PUT
, DELETE
и CONNECT
.
В Indy 10 добавлена поддержка пользовательских HTTP-методов, поэтому TIdHTTP
больше не ограничен жестко заданным подмножеством запросов.
Текущая версия Indy (на момент написания этой статьи) - 10.6.2.5457, и она по-прежнему поддерживает Delphi 6 (1) .
Я настоятельно призываю вас перейти с Indy 8, так как он ОЧЕНЬ стар и больше не поддерживается разработчиками Indy. Пожалуйста, не используйте это. Если вы не хотите полностью обновлять Indy 10, обновите до Indy 9 (хотя он больше не поддерживается, за исключением исправлений ошибок).
Тем не менее, существует один возможный обходной путь для Indy 8: IF HTTP-сервер, на который вы отправляете свои данные, поддерживает "туннелирование глаголов", тогда вы можете использовать TIdHTTP.Post()
для отправки запроса POST
при указании серверу обработать запрос, как если бы он был PUT
, например:
// Sadly, there is no *standard* HTTP header for verb tunneling.
// Different vendors use different headers:
//
// Most vendors use 'X-HTTP-Method-Override'
// Microsoft uses 'X-HTTP-Method'
// IBM uses 'X-METHOD-OVERRIDE'
//
// Send whichever one is appropriate for your particular server, or
// just send them all and let the server work it out...
Http1.Request.ExtraHeaders.Values['X-HTTP-Method-Override'] := 'PUT';
Http1.Request.ExtraHeaders.Values['X-HTTP-Method'] := 'PUT';
Http1.Request.ExtraHeaders.Values['X-METHOD-OVERRIDE'] := 'PUT';
Http1.Post(URI, ...);
(1) : поддержка версий Delphi, предшествующих Юникоду, включая Delphi 6, будет прекращена в следующем выпуске технической поддержки для Indy 11. Indy 10 будет последней версией, поддерживающей старые компиляторы.