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

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

一、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, 17) <> ‘http://‘ then

     begin

         if Copy(tmp, 11) = ‘.‘ then tmp := StringReplace(tmp, ‘.‘‘‘, []);

       if Copy(tmp, 11) = ‘.‘ 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;

时间: 2024-12-08 02:55:30

IDHTTP的基本用法的相关文章

IDHttp的基本用法(转)

一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入IDHttp procedure InitHttp();begin    http := TIdHTTP.Create(nil);    http.ReadTimeout := 30000;    http.OnRedirect := OnRedirect;    http.Request.Accept

Delphi IDHTTP用法详解

[delphi] view plaincopyprint? 一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入IDHttp procedure InitHttp(); begin http := TIdHTTP.Create(nil); http.ReadTimeout := 30000; http.OnRedirect := OnRedirect;

IDHTTP用法详解 good

一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入IDHttp procedure InitHttp(); begin http := TIdHTTP.Create(nil); http.ReadTimeout := 30000; http.OnRedirect := OnRedirect; http.Request.Accept := 'image/

IdHttp 资料

http://blog.csdn.net/delphizhou/article/details/3085704 IdHttp 资料 网上找了些不过很不好找.今天找了些收藏在一起.以便他人查阅, idhttp上传 先引用MsMultiPartFormData单元,在f:/code/delphi/component/下 通用的函数{*******************************************************************************使用INDY

delphi idhttp 实战用法(TIdhttpEx)

以delphi XE8 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法. TIdHttpEx 用法实例01[多线程获取网页](包含完整源码) 实例02(如何Post参数,如何保存与提取Cookie)待写 TIdHttpEx 已实现了对GZIP的解压,对UTF-8编码解码等 本文包含以下几个单元 uIdhttp.pas (TIdHttpEx) uIdCookieMgr.pas (TIdCookieMgr) uOperateIndy.pas 操作 TIdhttpEx 全靠它

delphi idhttp 实战用法

以delphi xe2 自带indy(10.5.8.0)组件为例,分享实战中遇到的问题及解决方法. Idhttp 重要属性 HTTPOptions := []; 属性设为空,禁止idhttp自动为post的TStringList参数编码,因为自动编码使用的是HttpApp单元下的HttpEncode, 但此函数有误,未将+,$,@这3个符号编成UrlCode.请自行改造此函数然后使用. HTTPOptions := [hoNoParseMetaHTTPEquiv]; 当遇到Get某个网页,idh

idhttp的用法

1)POST function PostMethod(http: TIDhttp; URL: string; Params: TStringList): string;var RespData: TStringStream;begin RespData := TStringStream.Create(''); try try if http = nil then Exit; Http.Post(URL, Params, RespData); Result := RespData.DataStri

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e