Перейти к содержанию
Fire Monkey от А до Я
  • 0

NetHTTPClient1.Get(URL, FS) - получить имя загружаемого файла


RADStudioDeveloper

Вопрос

Привет всем!

Загрузка с WEB сервера файла с помощью

NetHTTPClient

NetHTTPClient1.Get(URL, FS) - загрузка проходит хорошо.

Вопрос как получить имя загружаемого файла?

Есть реально работающее решение?

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
53 минут назад, OnePeople сказал:

Либо выдергивают из url или уже из самого файла( у мультимедиа например из тэгов)

Имени файла в URL нет! Пример https://telegram.org/dl/desktop/win

Ссылка на комментарий
  • 0
11 часов назад, OnePeople сказал:

В данном случае имя файла в responseHeader     

Location:https://updates.tdesktop.com/tsetup/tsetup.2.4.2.exe

Благодарю за отклик!

Абсолютно верно!

Как получить в Delphi коде  responseHeader (https://updates.tdesktop.com/tsetup/tsetup.2.4.2.exe) используя NetHTTPClient?

Ссылка на комментарий
  • 0

как обычно делаю это я:

идем в доки и ищем там слово header

http://docwiki.embarcadero.com/RADStudio/Sydney/en/Using_an_HTTP_Client

и прямо по ссылкам смотрим, как работать с этими хедерами

что из вышперечисленного вы не смогли сделать???

Ссылка на комментарий
  • 0

Krapotkin, благодарю за отклик!

 

Пробовал многое, вот к примеру: 

работает, но редирект на загружаемый файл responseHeader (https://updates.tdesktop.com/tsetup/tsetup.2.4.2.exe)

в коде MemHeaders.Lines.Add(Header.Name+': '+Header.Value);  - не отображает.

 

// https://webdelphi.ru/2019/02/http-client-api-v-delphi/#klass_tnethttpresponse_-_otvet
Очень долгий ответ.

procedure TForm.Button1Click(Sender: TObject);

var MS: TMemoryStream;
    Resp: IHTTPResponse;
    Header: TNameValuePair;
    Cookie: TCookie;
begin
  memHeaders.Lines.Clear;
  memCookies.Lines.Clear;
  memContent.Lines.Clear;

  MS:=TMemoryStream.Create;

  NetHTTPRequest1.ContentStream:=MS;
  NetHTTPRequest1.MethodString:='get';
  NetHTTPRequest1.URL:=edURL.Text;
  Resp:=NetHTTPRequest1.Execute();
  try
   //загружаем контент
    memContent.Lines.LoadFromStream(NetHTTPRequest1.ContentStream);
   //выводим заголовки
    for Header in Resp.Headers do
      MemHeaders.Lines.Add(Header.Name+': '+Header.Value);
   //выводим куки
    for Cookie in Resp.Cookies do
      memCookies.Lines.Add(Cookie.ToString);
   //выводим версию HTTP
    case Resp.Version of
      THTTPProtocolVersion.UNKNOWN_HTTP: lbHttpVer.Caption:='n/a';
      THTTPProtocolVersion.HTTP_1_0: lbHttpVer.Caption:='1.0';
      THTTPProtocolVersion.HTTP_1_1: lbHttpVer.Caption:='1.1';
      THTTPProtocolVersion.HTTP_2_0: lbHttpVer.Caption:='2.0';
    end;
   //выводим код статуса
    lbStatusCode.Caption:=Resp.StatusCode.ToString;
  finally
    FreeAndNil(MS)
  end;
end;

end.

Изменено пользователем RADStudioDeveloper
Ссылка на комментарий
  • 0
  • Модераторы

Вы не видите Location потому что получаете заголовки уже после редиректа, т.е. заголовки уже для самого файла.

А Location появляется во время первого запроса по адресу https://telegram.org/dl/desktop/win, там то как раз сервер и сообщает (в заголовках), что ваш запрос будет перенаправлен по адресу https://updates.tdesktop.com/tsetup/tsetup.2.4.2.exe и выдаёт вам новую порцию заголовков без Location.

Чтобы убедиться в этом, достаточно установить HandleRedirects = False.

 

Снимок.PNG

Ссылка на комментарий
  • 0
type
  TOpenURLResponse=class(TURLResponse);
procedure TForm3.FormCreate(Sender: TObject);
var
  HTTPClient:THTTPClient;
  Response: IHTTPResponse;
begin
  HTTPClient:=THTTPClient.Create;
  try
    Response:=HTTPClient.Get('https://telegram.org/dl/desktop/win');
    if (Response is TURLResponse) then
      Caption:=TOpenURLResponse(Response as TURLResponse).FRequest.URL.ToString;
  finally
    HTTPClient.Free;
  end;
end;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...