Видя инди-трафик в скрипаче - PullRequest
4 голосов
/ 11 февраля 2012

Я думаю, что это простой вопрос для тех, кто знаком с Инди. Я использую Delphi 2010 и Indy 10. Я пытаюсь получить доступ к веб-сервису SSL с нуля. Я думаю, будет намного проще, если я смогу заставить 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 Ответ

12 голосов
/ 11 февраля 2012

Вы можете настроить Indy для использования прокси-фиддлера, просто установив ProxyParams:

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;
...