Что состоит в том, чтобы назвать самый простой путь, Http ПОЛУЧАЮТ URL с помощью Delphi?

43
задан Sahil Mahajan Mj 11 March 2014 в 10:05
поделиться

4 ответа

Вы могли использовать WinINet API как это:

uses WinInet;

function GetUrlContent(const Url: string): string;
var
  NetHandle: HINTERNET;
  UrlHandle: HINTERNET;
  Buffer: array[0..1024] of Char;
  BytesRead: dWord;
begin
  Result := '';
  NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

  if Assigned(NetHandle) then 
  begin
    UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

    if Assigned(UrlHandle) then
      { UrlHandle valid? Proceed with download }
    begin
      FillChar(Buffer, SizeOf(Buffer), 0);
      repeat
        Result := Result + Buffer;
        FillChar(Buffer, SizeOf(Buffer), 0);
        InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
      until BytesRead = 0;
      InternetCloseHandle(UrlHandle);
    end
    else
      { UrlHandle is not valid. Raise an exception. }
      raise Exception.CreateFmt('Cannot open URL %s', [Url]);

    InternetCloseHandle(NetHandle);
  end
  else
    { NetHandle is not valid. Raise an exception }
    raise Exception.Create('Unable to initialize Wininet');
end;

источник: http://www.scalabium.com/faq/dct0080.htm

WinINet API использует тот же материал, который InternetExplorer использует так, Вы также получаете любое соединение и проксируете настройки, установленные InternetExplorer бесплатно.

27
ответ дан Lars Truijens 26 November 2019 в 22:44
поделиться

Вызов УСПОКОИТЕЛЬНОГО веб-сервиса с помощью Инди является довольно прямым.

Добавляют IdHTTP к Вашему пункту использования. Помните, что IdHTTP нужен префикс "HTTP://" на Ваших URL.

function GetURLAsString(const aURL: string): string;
var
  lHTTP: TIdHTTP;
begin
  lHTTP := TIdHTTP.Create;
  try
    Result := lHTTP.Get(aURL);
  finally
    lHTTP.Free;
  end;
end;
34
ответ дан Bruce McGee 26 November 2019 в 22:44
поделиться

Используйте функция синапса TCP/IP в единице HTTPSEND ( HTTPGetText, HTTPGetBinary). Это сделает получение по запросу HTTP для Вас и не требует никакого внешнего DLL кроме Winsock. Последние SVN выпускают работы отлично в Дельфи 2009. Это использует блокирующиеся вызовы функции, таким образом, никакие события к программе.

Обновление: единицы очень легки, и не компонентно-ориентированы. Последняя версия от SVN работает отлично в Delphi XE4 также.

2
ответ дан skamradt 26 November 2019 в 22:44
поделиться

Если можно загружать в файл, то можно использовать TDownloadURL из блока ExtActns. Это намного проще, чем использовать WinInet напрямую.

procedure TMainForm.DownloadFile(URL: string; Dest: string);
var
  dl: TDownloadURL;
begin
  dl := TDownloadURL.Create(self);
  try
    dl.URL := URL;
    dl.FileName := Dest;
    dl.ExecuteTarget(nil); //this downloads the file
  finally
    dl.Free;
  end;
end;

Также при использовании этого можно получать уведомления о ходе выполнения. Просто назначьте обработчик события для события OnDownloadProgress в TDownloadURL.

7
ответ дан 26 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: