对于熟悉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中获得此流量。
答案 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;