Fiddler.Coreを使用してリバースプロキシを作成しようとしています。これを使用して、http(s)を介してサードパーティのリクエストを再生できます。
libはhttpの場合はうまく機能しますが、httpsの場合は、応答の再生が単にタイムアウトするように見えるため、手順が不足しているようです。
仕様のコードは次のとおりです。
[TestClass]
public class Verify_basic_proxy_functionality
{
WebClient WC;
Proxy SUT;
[TestInitialize]
public void Init()
{
SUT = new Proxy();
SUT.InsertSession(Url:"http://proxy/ping",ResponseBody:"pong");
var uri = SUT.Startup(9100,IsRecording: false);
WC = new WebClient() { Proxy = new WebProxy(uri)};
}
[TestMethod]
public void Ping_should_return_pong()
{
WC.DownloadString("http://proxy/ping").ShouldBe("pong");
}
[TestMethod]
[ExpectedException(typeof(WebException))]
public void Pang_should_return_error()
{
WC.DownloadString("http://proxy/pang");
}
[TestMethod]
public void Http_reverse_proxy_should_work()
{
SUT.IsRecording = true;
var http_url = "http://httpbin.org/ip";
var initial_result = WC.DownloadString(http_url);
initial_result.ShouldContain("origin");
SUT.IsRecording = false;
var result = WC.DownloadString(http_url);
result.ShouldBe(initial_result);
}
// This one fails with a timeout... Probably need to close the connection or similar?
[TestMethod]
public void Https_reverse_proxy_should_work()
{
SUT.IsRecording = true;
var https_url = "https://httpbin.org/ip";
var initial_result = WC.DownloadString(https_url);
initial_result.ShouldContain("origin");
SUT.IsRecording = false;
var result = WC.DownloadString(https_url);
result.ShouldBe(initial_result);
}
}
プロキシのコードは、この要点にあります:https ://gist.github.com/ToJans/5082560
https(つまりエンコーディング)のために余分なステップを追加する必要があるかもしれないと思います。AFAIK fiddler.coreは、をインターセプトしOnValidateServerCertificate
て常にtrueを返すため、証明書エラーを無視します。
私がここで間違っていることを誰が教えてくれますか?