delphi IDHttp的基本用法

IDHttp的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快、更节约资源,缺点是需要手动维护cook,连接等 
IDHttp的创建,需要引入IDHttp

procedure InitHttp();
begin
http := TIdHTTP.Create(nil);
http.ReadTimeout := 30000;
http.OnRedirect := OnRedirect;
http.Request.Accept := ‘image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*’;
http.Request.AcceptLanguage := ‘zh-cn’;
http.Request.ContentType := ‘application/x-www-form-urlencoded’;
http.Request.UserAgent := ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)’;

http.ProxyParams.ProxyServer := ‘代理服务器地址’;
http.ProxyParams.ProxyPort := ‘代理服务器端口’;
end;
如何取得服务端返回的cookie信息,并添加到http的request对象中

procedure Setcookie;
var
i: Integer;
tmp, cookie: String;
begin
cookie := ”;
for i := 0 to http.Response.RawHeaders.Count – 1 do
begin
tmp := http.Response.RawHeaders[i];
if pos(’set-cookie: ‘, LowerCase(tmp)) = 0 then Continue;
tmp := Trim(Copy(tmp, Pos(’Set-cookie: ‘, tmp) + Length(’Set-cookie: ‘), Length(tmp)));
tmp := Trim(Copy(tmp, 0, Pos(’;', tmp) – 1));
if cookie = ” then cookie := tmp else cookie := cookie + ‘; ‘ + tmp;
end;
if cookie <> ” then
begin
for i := 0 to http.Request.RawHeaders.Count – 1 do
begin
tmp := http.Request.RawHeaders[i];
if Pos(’cookie’, LowerCase(tmp)) = 0 then Continue;
http.Request.RawHeaders.Delete(i);
Break;
end;
http.Request.RawHeaders.Add(’cookie: ‘ + cookie);
end;
end;
如何取得网页中的所有连接,对代码做修改你也可以实现查找所有图片等等, QStrings.rar(79K) (点击下载)在这里推荐使用QString来实现文本替换、查找等功能,附件里有下载。

function GetURLList(Data: String): TStringList;
var
i: Integer;
List: TStringList;
tmp: String;

function Split(Data, Node: String): TStringList;
var
Count, i, j: Integer;
function GetFieldCount(Data, Node: String): Integer;
var
i: Integer;
begin
Result := -1;
i := Pos(Node, Data);
if i = 0 then Exit;
Result := 0;
while i <> 0 do
begin
Inc(Result);
Delete(Data, 1, i + Length(Node) – 1);
i := Pos(Node, Data);
end;
end;
begin
Result := TStringList.Create;
Count := GetFieldCount(Data, Node);
for i := 0 to Count – 1 do
begin
j := Pos(Node, Data);
Result.Add(Copy(Data, 1, j – 1));
Delete(Data, 1, j + Length(Node) – 1);
end;
Result.Add(Data);
end;
begin
Result := TStringList.Create;
try
List := split(Data, ‘href=’);
for i := 1 to List.Count – 1 do
begin
tmp := List[i];
tmp := Copy(tmp, 0, Pos(’</a>’, tmp) – 1);
tmp := Copy(tmp, 0, Pos(’>’, tmp) – 1);
if Pos(’ ‘, tmp) <> 0 then tmp := Copy(tmp, 0, Pos(’ ‘, tmp) – 1);
tmp := Q_ReplaceStr(tmp, Char(34), ”);
tmp := Q_ReplaceStr(tmp, Char(39), ”);
if not Compare(CI.Key, tmp) then Continue;
if Copy(tmp, 1, 7) <> ‘http://’ then
begin
if Copy(tmp, 1, 1) = ‘.’ then tmp := StringReplace(tmp, ‘.’, ”, []);
if Copy(tmp, 1, 1) = ‘.’ then tmp := StringReplace(tmp, ‘.’, ”, []);
try
tmp := ‘http://’ + http.URL.Host + ‘:’ + http.URL.Port + http.URL.Path + tmp;
except
end;
end;
if Result.IndexOf(tmp) <> -1 then Continue;
Result.Add(tmp);
end;
FreeAndNil(List);
except

end;
end;

如何模拟http的get方法打开一个网页

function GetMethod(http: TIDhttp; URL: String; Max: Integer): String;
var
RespData: TStringStream;
begin
RespData := TStringStream.Create(”);
try
try
Http.Get(URL, RespData);
Http.Request.Referer := URL;
Result := RespData.DataString;
except
Dec(Max);
if Max = 0 then
begin
Result := ”;
Exit;
end;
Result := GetMethod(http, URL, Max);
end;
finally
FreeAndNil(RespData);
end;
end;

如何模拟http的post方法提交一个网页

function PostMethod(URL, Data: String; max: Integer): String;
var
PostData, RespData: TStringStream;
begin
RespData := TStringStream.Create(”);
PostData := TStringStream.Create(Data);
try
try
if http = nil then Exit;
Http.Post(URL, PostData, RespData);
Result := RespData.DataString;
http.Request.Referer := URL;
except
Dec(Max);
if Max = 0 then
begin
Result := ”;
Exit;
end;
Result := PostMethod(URL, Data, Max);
end;
finally
http.Disconnect;
FreeAndNil(RespData);
FreeAndNil(PostData);
end;
end;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi中使用IdHTTP组件下载大文件可以按照以下步骤进行操作: 1. 创建一个新的Delphi项目,将IdHTTP组件拖放到主窗体上。 2. 在主窗体的事件处理程序中,编写下载功能的代码。 首先,需要设置IdHTTP组件的一些属性,例如超时时间、编码等。接着,根据下载文件的URL地址,调用IdHTTP组件的Get方法进行文件下载。 示例代码如下: ```delphi uses IdHTTP, IdSSL; procedure TForm1.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; IdSSL: TIdSSLIOHandlerSocketOpenSSL; begin IdHTTP := TIdHTTP.Create(nil); IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); try IdHTTP.IOHandler := IdSSL; IdHTTP.HandleRedirects := True; IdHTTP.Request.Connection := 'Keep-Alive'; IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'; IdHTTP.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'; IdHTTP.Request.AcceptEncoding := 'gzip, deflate, br'; IdHTTP.Request.AcceptLanguage := 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'; IdHTTP.Get('http://example.com/bigfile.zip', 'C:\Downloads\bigfile.zip'); finally IdSSL.Free; IdHTTP.Free; end; end; ``` 以上代码中,根据实际情况设置了一些请求头信息,如User-Agent、Accept-Encoding等。然后通过Get方法将远程文件下载到本地,下载的文件路径为`C:\Downloads\bigfile.zip`。 需要注意的是,下载大文件时可能需要考虑到网络问题以及服务器的限制。可以添加一些异常处理机制,例如使用try-except语句来处理网络连接异常或文件保存异常。此外,也可以根据下载进度来更新UI界面。 以上就是在Delphi中使用IdHTTP组件下载大文件的简单示例。根据需要可以进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值