Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы HTTP/1.1 403 Forbidden при загрузке файла с помощью IdHTTP в Delphi

Delphi , Интернет и Сети , URL

При работе с IdHTTP в Delphi для загрузки файла с удаленного сервера, мы можем столкнуться с ошибкой HTTP/1.1 403 Forbidden. В данной статье мы рассмотрим причину этой ошибки и предложим решение, основываясь на материале из контекста.

Описание проблемы

Пользователь пытается использовать IdHTTP для эмуляции команды curl, которая загружает файл с удаленного сервера и сохраняет его на жестком диске. Для авторизации используется файл-токен, путь к которому передается в качестве параметра. Однако, при выполнении кода в Delphi, пользователь получает ошибку HTTP/1.1 403 Forbidden.

Причина ошибки

Ошибка HTTP/1.1 403 Forbidden указывает на то, что сервер понял запрос, но отказывается его выполнять. В данном случае, проблема заключается в неверной настройке TIdMultipartFormDataStream. Пользователь создает текстовое поле, содержимым которого является имя файла, а не сам файл.

Решение проблемы

Для решения проблемы, мы должны правильно настроить TIdMultipartFormDataStream, создав поле для загрузки файла, а не текстового поля. Ниже представлен исправленный код:

procedure TMainForm.HTTPGetFile;
var
  IdHTTP: TIdHTTP;
  Params: TIdMultipartFormDataStream;
  LHandler: TIdSSLIOHandlerSocketOpenSSL;
  LOutFile: TFileStream;
begin
  try
    Params := TIdMultipartFormDataStream.Create;
    try
      Params.AddFile('message', 'C:\Users\santon\Desktop\ESM_download\token.txt', 'application/octet-stream');

      IdHTTP := TIdHTTP.Create(nil);
      try
        LHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
        LHandler.SSLOptions.Method := sslvTLSv1;
        IdHTTP.IOHandler := LHandler;

        LOutFile := TFileStream.Create('C:\Users\santon\Desktop\RecordFileName.zip', fmCreate);
        try
          IdHTTP.Post('https://esm-db.eu/esmws/eventdata/1/query?eventid=IT-1997-0004&station=CLF&format=ascii', Params, LOutFile);
        finally
          LOutFile.Free;
        end;
      finally
        IdHTTP.Free;
      end;
    finally
      Params.Free;
    end;
  except
    on E: Exception do
      ShowMessage('Error: ' + E.ToString);
  end;
end;

В данном примере, мы используем метод AddFile вместо AddFormField, чтобы добавить файл в запрос. Также, мы указываем Content-Type файла как 'application/octet-stream', что сообщает серверу, что мы отправляем бинарные данные.

После настройки TIdMultipartFormDataStream, мы создаем TIdSSLIOHandlerSocketOpenSSL для обработки SSL-соединения и настраиваем его метод как sslvTLSv1. Далее, мы создаем TFileStream для записи полученных данных и выполняем запрос POST с помощью IdHTTP.

Примечание: Не забудьте изменить путь к выходному файлу в соответствии с вашими требованиями.

Вывод

При работе с IdHTTP в Delphi для загрузки файла с удаленного сервера, важно правильно настроить TIdMultipartFormDataStream, создав поле для загрузки файла, а не текстового поля. Использование метода AddFile вместо AddFormField и правильная настройка Content-Type файла помогут избежать ошибки HTTP/1.1 403 Forbidden.

Создано по материалам из источника по ссылке.

Контекст этой статьи — решение проблемы HTTP/1.1 403 Forbidden при загрузке файла с помощью IdHTTP в Delphi, которая возникает из-за неправильной настройки TIdMultipartFormDataStream.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: URL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 11:56:31/0.0019118785858154/0