一、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;

IDHttp的基本用法(转)的更多相关文章

  1. Delphi的IDHTTP的基本用法

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

  2. IDHTTP的基本用法

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  3. Delphi IDHTTP用法详解(六种用法)

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

  4. Delphi IDHTTP用法详解

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

  5. IDHTTP用法详解 good

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

  6. IdHttp 资料

    http://blog.csdn.net/delphizhou/article/details/3085704 IdHttp 资料 网上找了些不过很不好找.今天找了些收藏在一起.以便他人查阅, idh ...

  7. IDHTTP

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

  8. delphi idhttp 实战用法(TIdhttpEx)

    以delphi XE8 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法. TIdHttpEx 用法实例01[多线程获取网页](包含完整源码) 实例02(如何Post参数,如何 ...

  9. INDY idhttp Post用法

    http://www.cnblogs.com/tk-del/archive/2013/05/10/3071541.html function Post(AURL: string; ASource: T ...

随机推荐

  1. Mysqlbackup 备份详解(mysql官方备份工具)

    A.1全库备份. 命令: mysqlbackup --defaults-file=/home/mysql-server/mysql3/my.cnf  --user=root --password=ro ...

  2. 30道Linux面试题

    1.linux如何挂在windows下的共享目录 mount.cifs //192.168.1.3/server /mnt/server -o user=administrator,pass=1234 ...

  3. 动态加载so文件

    在开发过程中,经常会用到第三方库,比如地图.视频.文档编辑.图表之类.依赖这些库,需要添加其SDK,有时需要用到jni层的So文件,比如百度地图等. 那么问题来了,如果两个不同的库之间的so文件发生冲 ...

  4. 【转】traits技术及模板偏特化

    #include <iostream> using namespace std; struct __xtrue_type { }; // define two mark-type stru ...

  5. POJ 1077 Eight

    题意:经典的八数码=3= 3*3的格子,里面有1~8这8个数字,还有一个空格x,移动空格的位置,直到移到1~8按顺序排好,输出移动的序列. 解法:看到题果断写了个广搜……然后T了……百度了一下说广搜虽 ...

  6. Keep the Customer Satisfied

    题意: n个订单,每个订单有完成需要的天数,和限制的天数,求最多能完成多少订单 分析: 先按限制日期升序排列,若当前订单不能完成,和上面已选中的订单中需要天数中最大的比较,若比它小,则替换他. #in ...

  7. 单片机usb转串口的时灵时不灵的解答

    写这篇博客,首先检讨一下自己,因为以前串口的程序,也和步进电机一样,时灵时不灵,我现在终于知道这是为什么了,因为51上有三个串口,一个公口,一个母口,一个usb转串口,这样的话,串口有3个了,我手头上 ...

  8. void、void*以及NULL

    void.void*以及NULL 写在前面 在使用C++的过程中,void和NULL用到的频率挺高的,但是从来没有去探索过这两个关键字的联系和区别,也没有对它们做更多的探索.对于void*,说实话,实 ...

  9. wuzhicms访问统计实现方法

    实现目标:程序实现了对整站页面pv的统计文件的位置:coreframe/app/content/pv.php代码预览: /** * 总站访问次数统计 */ defined('IN_WZ') or ex ...

  10. 我需要在电脑上安装C编译器

    这本书中我们使用了gcc(GNU编译器套装),它不但功能十分强大,而且还是免费的.你需要确保你的电脑上已经安装了gcc.如果你的操作系统是Linux,恭喜你,你已经拥有了gcc.