2012-11-08 7 views
0

GET/POST를 가로 채려고 시도하고 있습니다. IdHTTPProxyServer에서 가져 와서 IdHTTP로 보내 GET/POST를 복제하고 결국 쿠키를 가져 와서 모든 웹 사이트에 로그인 할 수 있습니다.WebBrowser에 프록시 GET/POST 보내기

어떻게 개선 할 수 있습니까? 이 코드를 실행하려고하면 충돌이 발생합니다.

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; 
+1

은 무엇 정확히 충돌? 좀 더 구체적이어야합니다. –

+0

@RemyLebeau IE를 사용하여 웹 사이트에 연결하려고 할 때마다 HTML을 EmbeddedWB로로드하려고 할 때 EmbeddedWB와 충돌합니다. IdHttp에서 반환 된 html은 EmbeddedWB가로드하는 데 실패합니다. :( –

+1

글쎄,'TEmbeddedWB'는 시각적 인 UI 컴포넌트이고, 'TIdHTTPProxyServer'는 멀티 쓰레드 구성 요소이므로 뭔가 관련이있을 수 있습니다. 작업자 스레드 컨텍스트에서 UI 구성 요소에 액세스 할 수 없으며, 기본 UI 스레드의 컨텍스트 만 –

답변

1
OnHTTPDocument 이벤트를 사용하면 이벤트가 신체 데이터를 포함, 또는 클라이언트에 대상 서버의 응답을 트리거되고 클라이언트 요청에 대해 트리거되고 있는지 알기 위해 TIdHTTPProxyServerContext.TransferSource 특성을 볼 필요가

의뢰. 자신의 GET/POST 요청을 보내면 클라이언트 요청을 처리 할 때만 의미가 있지만 GET 요청에 대해서는 OnHTTPDocument 이벤트가 트리거되지 않을 가능성이 높습니다. 캡처 할 본문 데이터가 없기 때문입니다.

서버의 쿠키를 얻으려면 TIdHTTP을 사용할 필요가 없습니다. TIdHTTPProxyServer 일반적으로 작업을하자, 다음은 OnHTTPResponse 이벤트 등의 TIdHTTPProxyServerContext.Headers 호텔에서 쿠키를 추출 할 수 있습니다 :

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; 
관련 문제