`
znhyz1
  • 浏览: 159588 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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;

 三、如何取得网页中的所有连接,对代码做修改你也可以实现查找所有图片等等

 

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;

 六、伪造session

 

var
  My_Cookie,tmpcookie:string;

begin
  aIdHttp.Get('http://www.huochepiao.net/');
  tmpcookie:=aIdHttp.Request.CustomHeaders.Values['Set-Cookie'];
  if Pos(';',tmpcookie)>0 then
     My_Cookie:=LeftBStr(tmpcookie,Pos(';',tmpcookie)-1)
  else
     My_Cookie:= tmpcookie;
  //
  aIdHTTP.Request.CustomHeaders.Clear;
  aIdHTTP.Request.CustomHeaders.Add('Cookie:'+My_COOKIE);

end;

 转载地址:http://www.cnblogs.com/myjgzs/archive/2010/04/30/1725068.html 

分享到:
评论

相关推荐

    delphi 7 idhttp post 的8种使用方法

    本文将深入探讨IDHTTP组件在POST请求中的8种使用方法,帮助开发者更好地理解和利用这个强大的工具。 1. **基本POST请求** IDHTTP组件最简单的POST请求可以通过设置其 `Method` 属性为 `htPost`,然后调用 `Execute...

    Delphi使用IdHTTP控件操作Cookies的例子.rar

    首先,我们需要了解IdHTTP控件的基本用法。在Delphi中, Indy 是一个流行的网络通信库,IdHTTP是Indy库中的一个组件,它提供了一个简单的方式来发送HTTP请求并接收响应。要使用IdHTTP,首先需要在工具箱中找到它,...

    delphi操作IdHTTP报头读写

    在Delphi中,IdHTTP组件提供了便捷的方法来设置和获取这些报头字段。 设置HTTP请求报头: 1. 创建IdHTTP组件:在Delphi的Form设计界面或代码中,首先创建一个TIdHTTP对象,例如: ```delphi var IdHTTP: TIdHTTP;...

    delphi 7 idhttp post 的8种使用方法(含源码)

    以上8种方法涵盖了IDHTTP组件在POST请求中的常见应用场景。通过这些示例,开发者可以根据实际需求灵活地调整和扩展代码,以满足不同的网络通信需求。在实际开发中,务必注意错误处理和资源管理,确保程序的稳定性和...

    Idhttp示例.rar_DELPHI7 Idhttp 示例_continuedhxe_delphi7 idhttp_idhtt

    通过这个示例,我们可以了解到 Delphi 7 中使用 Indy 的 `TIdHTTP` 控件进行 HTTP 请求的基本操作。无论是简单的 GET 请求还是复杂的 POST 操作,都可以轻松实现。实际开发中,还需要根据具体需求对错误处理、数据...

    delphi idhttp 循环 Post

    在Delphi编程环境中,IDHTTP组件是Indy库中用于HTTP...以上就是使用Delphi的IDHTTP组件进行循环POST操作的基本步骤和注意事项。实际应用中,根据具体需求进行调整,如添加异步处理、进度条显示、多线程支持等高级功能。

    Delphi的rest与idhttp的post提交+源码+测试可用

    总结,Delphi中的REST与IDHTTP组件结合使用,使得开发人员能够轻松地向RESTful API发送POST请求,处理网络交互。通过源码和测试用例,开发者可以更好地理解和应用这些概念,提高开发效率和代码质量。

    Delphi中idHttp和HttpServer当客户端与服务器作数据传输的实例

    在Delphi编程环境中,`idHttp` 和 `idHttpServer` 是两个非常重要的组件,用于实现客户端和服务器之间的数据通信。这两个组件是 Indy (Internet Direct) 库的一部分,提供了丰富的功能来处理HTTP协议的需求。 首先...

    delphiIdHttp_delphi_idhttp_进度_

    在这个场景中,我们关注的重点是如何使用`TIdHTTP`来实现文件的下载,并且支持断点续传功能,同时更新进度条以展示下载状态。以下是对这个主题的详细解释: 1. **TIdHTTP组件**: `TIdHTTP`是Indy库中的一个关键...

    使用delphi XE的IdHTTP控件POST的例子

    在Delphi XE开发环境中,`IdHTTP`控件是一个非常强大的组件,它允许开发者执行HTTP请求,包括GET、POST等方法。在这个例子中,我们将深入探讨如何利用`IdHTTP`进行POST请求,以及这个过程中的关键知识点。 首先,...

    DelphiXE + idHttp和HttpServer + 当客户端与服务器作数据传输的实例+(源码+测试可用)

    通过这些源码,你可以详细学习到如何在DelphiXE中配置和使用idHttp与HttpServer组件,以及如何编写处理网络请求的代码。在实际操作中,可以先运行服务器端程序,然后启动客户端程序进行通信测试,以验证数据传输的...

    DELPHI7做IDHTTP开发SSL时,提示使用的2个DLL文件 libeay32.DLL 和 ssleay32.DLL 亲测可用

    在DELPHI7中使用IDHTTP组件进行SSL开发,你需要按照以下步骤操作: 1. 将"libeay32.DLL"和"ssleay32.DLL"文件放置在应用程序的运行目录下,因为它们是运行时需要的。 2. 在DELPHI7代码中,设置IDHTTP组件的`...

    Delphi Xe10 使用Idhttp get 新浪股票API

    ### Delphi Xe10 使用 IdHTTP GET 新浪股票 API #### 概述 本篇文章主要介绍了如何在 Delphi Xe10 开发环境中利用 Indy 库中的 `TIdHTTP` 控件发起 HTTP GET 请求来获取新浪股票 API 接口的数据。通过这种方式,...

    Idhttp SSl 网站

    标题中的“Idhttp SSL 网站”指的是在Delphi编程环境中使用Indy库的IDHTTP组件进行HTTPS(SSL/TLS)通信时遇到的问题。IDHTTP是Delphi中用于发送HTTP请求的组件,而SSL(Secure Socket Layer)或其升级版TLS...

    idhttp六种post方法

    本示例聚焦于Delphi7环境下使用Indy库中的IDHTTP组件实现六种不同的POST方法。IDHTTP是Indy提供的一款强大的HTTP客户端组件,它允许开发者发送各种HTTP请求,包括GET、POST等。 首先,我们来详细解释POST方法。POST...

    delphi_rest与idhttp的post提交

    在Delphi编程环境中,开发人员经常使用Indy(Internet Direct)组件库来进行网络通信,其中IDHTTP组件是用于HTTP协议操作的重要部分。本主题将深入探讨如何利用Delphi的REST组件和IDHTTP组件进行POST数据提交,这...

    Delphi XE8 IDHTTP1.get()方法從Servlet服务器取json数据

    在本示例中,我们探讨了如何在 Delphi XE8 中使用 IDHTTP1.get() 方法从一个基于 Servlet 3.1 的服务器获取 JSON 数据。这个过程涉及到 Delphi 客户端与 Java 服务端之间的通信,其中 JSON 用于数据交换格式。以下是...

    DELPHIXE10.3.1 做IDHTTP开发SSL时,提示使用的2个DLL文件 libeay32.DLL 和 ssleay32.DLL 亲测可用

    为了在Delphi中使用IDHTTP进行SSL连接,你需要: 1. **导入OpenSSL库**:在Delphi项目中,需要引入相应的单元,如`IdSSLOpenSSLHeaders`,以使用OpenSSL的API。 2. **设置IDHTTP组件**:在IDHTTP组件上启用SSL,...

    delphi +idttp 的post使用。

    本文将详细讲解如何使用Delphi配合IDHTTP组件进行POST请求,以实现数据的发送和接收。 首先,理解POST请求的基本概念。在HTTP协议中,POST请求常用于向服务器提交数据,比如在网页表单提交时,数据会被封装在请求体...

    delphi +aps idhttp上传文件

    在Delphi中,你可以通过设置IDHTTP组件的属性、方法和事件来发起HTTP请求,处理响应数据。 2. **文件上传的基本原理**: HTTP文件上传通常使用POST或PUT方法,其中POST更常见。文件上传的数据通常被编码为多部分/...

Global site tag (gtag.js) - Google Analytics