在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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/94YY/p/3481358.html
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论