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('', 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;