我试图拦截我从IdHTTPProxyServer获取的GET / POST并将其发送到IdHTTP,这样我就可以复制GET / POST并最终获得cookie,这样我就可以登录任何网站了。
如何改进?如果我尝试执行此代码,它会崩溃。
procedure TForm1.IdHTTPProxyServer1HTTPDocument(
AContext: TIdHTTPProxyServerContext; var VStream: TStream);
begin
if AContext.Command='POST' then begin
EmbeddedWB1.LoadFromString(IdHTTP1.Post(AContext.Target,AContext.Headers.Text)); << CRASH
end;
if AContext.Command='GET' then begin
EmbeddedWB1.LoadFromString(IdHTTP1.Get(AContext.Target)); << CRASH
end;
end;
答案 0 :(得分:1)
使用OnHTTPDocument
事件时,您需要查看TIdHTTPProxyServerContext.TransferSource
属性,以了解是否为包含正文数据的客户端请求触发了事件,或者是否正在为目标服务器触发事件响应客户端请求。发送您自己的GET
/ POST
请求仅在处理客户端请求时才有意义,但是OnHTTPDocument
请求不太可能触发GET
事件,因为没有身体数据捕获。
您无需使用TIdHTTP
即可获取服务器的Cookie。让TIdHTTPProxyServer
正常工作,然后您可以从TIdHTTPProxyServerContext.Headers
事件中的OnHTTPResponse
属性中提取Cookie,例如:
procedure TForm1.IdHTTPProxyServer1HTTPResponse(AContext: TIdHTTPProxyServerContext);
var
Cookies: TStringList;
begin
Cookies := TStringList.Create;
try
AContext.Headers.Extract('Set-Cookie', Cookies);
// use Cookies as needed, such as:
// URI := TIdURI.Create(AContext.Target);
// try
// CookieManager1.AddServerCookies(Cookies, URI);
// finally
// URI.Free;
// end;
finally
Cookies.Free;
end;
end;