龙空技术网

Delphi网络编程之下载文件

青少年编程ABC 542

前言:

今天各位老铁们对“c语言windows函数库下载”大约比较关注,你们都需要了解一些“c语言windows函数库下载”的相关资讯。那么小编在网络上汇集了一些有关“c语言windows函数库下载””的相关内容,希望同学们能喜欢,各位老铁们快快来学习一下吧!

1.1 使用 urlmon 下载文件

urlmon.dll内置于Windows中,可用于从网站下载文件。它支持SSL/TLS连接。但仅限Windows;

在 uses 语句中添加 URLMon 单元。

URLDownloadToFile 函数原型:

function URLDownloadToFile(pCaller: pointer; URL: PChar; FileName: PChar; Reserved: DWORD; lpfnCB : pointer): HResult; stdcall; external 'urlmon.dll' name 'URLDownloadToFileA';

使用示例:

procedure TForm1.Button1Click(Sender: TObject);var Source, Dest: string;begin Source:=';; Dest:='C:\Windows\temp\data.txt'; if URLDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil)=0 then  showmessage('Download ok!') else  showMessage('Error downloading '+Source);end;
1.2 使用 fphttpclient 下载文件

fphttpclient作为fcl web包的一部分随FPC提供,也可以单独使用。

在 uses 语句中添加 fphttpclient 单元。

我们可以使用 TFPHttpClient 类实例的 Get 方法来下载文件,示例代码:

program dl_fphttp_d;{$mode delphi}{$ifdef windows}{$apptype console}{$endif}uses  sysutils,   classes,   fphttpclient,   openssl,  opensslsockets;const  Filename = 'testdownload.txt';var  Client: TFPHttpClient;  FS: TStream;  SL: TStringList;begin  { SSL initialization has to be done by hand here }  InitSSLInterface;  Client := TFPHttpClient.Create(nil);  FS := TFileStream.Create(Filename,fmCreate or fmOpenWrite);  try    try      { Allow redirections }      Client.AllowRedirect := true;      Client.Get(';,FS);     except      on E: EHttpClient do        writeln(E.Message)      else        raise;    end;  finally    FS.Free;    Client.Free;  end;    { Test our file }  if FileExists(Filename) then  try    SL := TStringList.Create;    SL.LoadFromFile(Filename);    writeln(SL.Text);  finally    SL.Free;  end;      end.
1.3 使用 Synapse 下载文件

Synapse 提供串行端口和 TCP/IP 连接。它与其他库不同,您只需要向代码中添加一些 Synapse Pascal 源代码文件;无需安装软件包等。唯一的例外是,如果您想使用SSL/TLS/SSH等加密,则需要外部加密库。

Synapse 通过阻塞(同步)套接字或有限的非阻塞模式处理网络通信。Synapse 未使用异步套接字。Synapse 包含简单的低级非可视对象,便于无问题地进行编程。(无需多线程同步,无需windows消息处理,…)非常适合命令行实用程序、可视化项目、NT服务等。

在 Synapse 官方网站(),还可以找到 Synapse 项目的一个补充,名为SynaSer。这是用于阻止串行端口上的通信的库。它是Synapse中的非可视化类,程序员界面与Synapsee非常相似。

使用 Synapse 时,Lazarus、Delphi 需要安装,CodeTyphon 默认已经安装 Synapse。

编写下载文件程序时,在 uses 语句中添加 httpsend 单元。示例代码:

...uses httpsend,...function DownloadHTTP(URL, TargetFile: string): Boolean;var  HTTPGetResult: Boolean;  HTTPSender: THTTPSend;begin  Result := False;  HTTPSender := THTTPSend.Create;  try    HTTPGetResult := HTTPSender.HTTPMethod('GET', URL);    if (HTTPSender.ResultCode >= 100) and (HTTPSender.ResultCode<=299) then begin      HTTPSender.Document.SaveToFile(TargetFile);      Result := True;    end;   finally    HTTPSender.Free;  end;end;
1.4 综合示例

使用以上三种方式下载文件。界面如下:

具体操作不再赘述,代码如下:

unit unitmain;{$mode objfpc}{$H+}interfaceuses  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, fphttpclient, httpsend, UrlMon;type  { TFormMain }  TFormMain = class(TForm)    SynapseDownButton: TButton;    FPHttpClientDownButton: TButton;    UrlDownButton: TButton;    procedure SynapseDownButtonClick(Sender: TObject);    procedure FPHttpClientDownButtonClick(Sender: TObject);    procedure UrlDownButtonClick(Sender: TObject);  private  public  end;var  FormMain: TFormMain;implementation{$R *.frm}{ TFormMain }procedure TFormMain.UrlDownButtonClick(Sender: TObject);var  Source, Dest: String;begin  Source := ';;  Dest := 'e:\temp\redis-6.2.1.tar.gz';  try    if UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0 then      ShowMessage('文件下载成功')    else      ShowMessage('文件下载失败');  except    ShowMessage('文件下载失败');  end;end;procedure TFormMain.FPHttpClientDownButtonClick(Sender: TObject);var  HttpClient: TFPHttpClient;  DownLoadFile:TFileStream;begin  DownLoadFile:=TFileStream.Create('e:\temp\redis-4.0.10.tar.gz',fmCreate);  HttpClient := TFPHttpClient.Create(nil);  try    HttpClient.AllowRedirect := True;    HttpClient.Get(';, DownLoadFile);    ShowMessage('文件下载成功');  except    ShowMessage('文件下载失败');  end;  DownLoadFile.Free;  HttpClient.Free;end;procedure TFormMain.SynapseDownButtonClick(Sender: TObject);var  HTTPSender: THTTPSend;begin  HTTPSender := THTTPSend.Create;  try    HTTPSender.HTTPMethod('GET', ';);    if (HTTPSender.ResultCode >= 100) and (HTTPSender.ResultCode<=299) then    begin      HTTPSender.Document.SaveToFile('e:\temp\redis-7.0.5.tar.gz');      ShowMessage('文件下载成功');    end    else      ShowMessage('文件下载失败');  except    ShowMessage('文件下载失败');  end;  HTTPSender.Free;end;end.

标签: #c语言windows函数库下载