DELPHI idHTTP訪問HTTPS網址

訪問一個 WEB 網站,如果採用 HTTP 的話,直接使用 TIdHTTP 這個控件,最簡單的用法是:

S := IdHTTP1.Get('http://www.baidu.com');

這裏返回的 S 就是對應的網頁的文本內容。

如果要訪問 https 的網站,則需要 SSL 庫。在 Windows 底下,去 https://indy.fulgan.com/SSL/ 下載最新的 SSL 的庫。下載後,解壓縮,包括兩個 dll 文件:ssleay32.dll 和 libeay32.dll;直接放到你的程序編譯好的 EXE 相同文件夾底下就可以了。

運行期你的程序會自動加載這兩個 DLL 完成 SSL 的功能。

設計期,拖一個 TIdSSLIOHandlerSocketOpenSSL 過來,然後設置 IdHTTP1 的屬性:

1. IOHandler 這個屬性,下拉,選擇 IdSSLIOHandlerSocketOpenSSL1;

2. HandleRedirects 屬性:設置爲 True;默認是 False;

另外,要注意設置一下 IdSSLIOHandlerSocketOpenSSL1 的屬性:SSLOptions -> Method 這個屬性,設置爲:sslvTLSv1_1

然後採用這行代碼就搞定:S := IdHTTP1.Get('https://www.baidu.com');

下面是一個用HTTP/HTTPS下載文件的例子,希望對大家有用:

function TForm1.DownloadFile(aurl: string; destfile: string): string;
var
  MemoryStream: TMemoryStream;
  URL, SavePath, sFileName,sFileType: string;
  DMHttp: TIdHTTP;
begin
  Result := '';
  if aurl = '' then Exit;
  URL := '';
  SavePath := '';
  sFileName := '';
  sFileType := '';

  try
    MemoryStream := TMemoryStream.Create;
    DMHttp := TIdHttp.Create(nil);
    URL :=aurl;
    Screen.Cursor := crHourGlass;
    if aurl.StartsWith('https') then
    begin
      DMHttp.IOHandler := idSSLIOHandlerSocketOpenSSL1;
      DMHttp.HandleRedirects := True;
    end;
    try
      DMHttp.Get(URL, MemoryStream);
      MemoryStream.Position := 0;

      sFileName := DMHttp.Response.RawHeaders.Values['Content-Disposition'];
      Delete(sFileName, 1, Pos('filename=', sFileName) + Length('filename=') - 1);
      if destfile.Contains('\\') then
      begin
        SavePath := destFile;
      end
      else
      begin
        SavePath := ExtractFilePath(Application.ExeName) + '\\' + destfile;
      end;
      MemoryStream.SaveToFile(SavePath);
      Result := SavePath;
    except

    end;
  finally
    FreeAndNil(MemoryStream);
    FreeAndNil(DMHttp);
    Screen.Cursor := crDefault;
  end;

end;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章