在Fiddler看到Indy交通

时间:2012-02-10 23:41:49

标签: delphi indy

对于熟悉Indy的人,我认为这是一个简单的问题。我正在使用Delphi 2010和Indy 10.我正试图开始访问SSL Web服务。我认为如果我能让Fiddler看到我的HTTP流量会更容易。我已经看到StackOverflow上的帖子表明让Fiddler看到你的Indy流量并不重要,你必须配置端口才能使它工作。我的问题是你是怎么做到的?

到目前为止,这是我的代码:

procedure TForm1.Button1Click(Sender: TObject);
var slRequest: TStringList;
    sResponse,
    sFileName: String;
    lHTTP: TIdHTTP;
    lIOHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  sFileName := 'Ping.xml';
  slRequest := TStringList.Create;
  try
    slRequest.LoadFromFile(sFileName);
    lHTTP := TIdHTTP.Create(nil);
    lHTTP.Intercept := IdLogDebug1;
    lIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    try
      lHTTP.IOHandler := lIOHandler;
      sResponse := lHTTP.Post('https://FSETTESTPROD.EDD.CA.GOV/fsetservice', slRequest);
      Memo1.Lines.Text := sResponse;
    finally
      lIOHandler.Free;
    end;
  finally
    slRequest.Free;
  end;
end;

编辑:如果我没有使用Fiddler的代理并在Wireshark运行时单击按钮,我会在Wireshark中获得此流量。 enter image description here

1 个答案:

答案 0 :(得分:12)

您可以通过设置ProxyParams来设置Indy以轻松使用代理fiddler:

try
  lHTTP.IOHandler := lIOHandler;
  lHTTP.ProxyParams.ProxyServer := '127.0.0.1';
  lHTTP.ProxyParams.ProxyPort := 8888;
  sResponse := lHTTP.Post('<URL>', slRequest);
  Memo1.Lines.Text := sResponse;
finally
  lIOHandler.Free;
end;

然后你应该可以看到Fiddler的所有流量。

编辑:如果这不起作用,您可以添加TIdLogDebug组件并将其添加为拦截器(就像您在问题中所做的那样)。 OnReceive和OnSend事件包含发送和接收的完整标头以及回复数据:

procedure TForm10.captureTraffic(ASender: TIdConnectionIntercept; 
  var ABuffer: TArray<Byte>);
var
  i: Integer;
  s: String;
begin
  s := '';

  for i := Low(ABuffer) to High(ABuffer) do
    s := s + chr(ABuffer[i]);

  Memo1.Lines.Add(s);
end;