Прошу прощения - мой вопрос в конечном итоге потребовал больше деталей, чем я знал во время запроса. Если кто-то заинтересован, я решил эту проблему, используя этот странный метод:
Топология: клиент Windows -> прокси-сервер Fiddler на клиенте Windows -> обратный прокси-сервер Fiddler на человеке-в-середине -> сервер Windows
кода в Windows Client CustomRules.js:
static function OnBeforeRequest(oSession: Session) {
//detect prefetch response
if (oSession.oRequest.headers.Exists("X-FiddlerPrefetch")) {
//dump response into a variable
oSession.utilDecodeRequest();
prefetchResponse = System.Text.Encoding.UTF8.GetString(oSession.requestBodyBytes);
}
//detect uri that was prefetched
if (oSession.uriContains("/some_uri")) {
//wait for prefetch - cant find any docs for how to 'sleep' here
// while (prefetchResponse === "") {
// Sleep(1);
// }
//use cached response
oSession.utilCreateResponseAndBypassServer();
oSession.utilSetResponseBody(prefetchResponse);
}
//redirect traffic to man-in-the-middle
if (oSession.HostnameIs("some_server")) {
oSession["x-overrideHost"] = "man-in-the-middle:443";
}
...
код в человек-в-середине CustomRules.js:
static function OnBeforeResponse(oSession: Session) {
//intercept response containing prefetch material
if (oSession.uriContains("some_response")) {
//parse response body for some prefetch info
...
//compose request
var request = "POST " + uri + " HTTP/1.1" + "\n" +
"X-FiddlerOpt: test\n" +
...
//send off to server
FiddlerObject.utilIssueRequest(request);
}
//detect the prefetch response, send to client
if (oSession.oRequest.headers.Exists("X-FiddlerOpt")) {
oSession.utilDecodeResponse();
var payload = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);;
//compose request
var request = "GET " + "http://windows_client:8888/ HTTP/1.1" + "\n" +
"Content-Length: " + payload.length + "\n" +
"X-FiddlerPrefetch: test\n" +
"\n" +
payload
//send request
FiddlerObject.utilIssueRequest(request);
}
...
Я уверен, что есть более простые и более эффективные способы сделай это, любая обратная связь приветствуется.
По какой-то причине я не понимаю этот ответ. Чтобы быть ясным, здесь я пытаюсь «предварительно выбрать» страницу с сервера, поэтому я хочу ввести новый запрос от прокси, не изменяя существующий запрос. Я понимаю, что есть много вещей, которые следует учитывать при «предварительной выборке», но сейчас я сохраняю проблему простой. – SheerSt
Затем вам нужно объяснить, что вы имеете в виду, когда говорите «направить запрос, полученный утилитой utilIssueRequest, обратно на клиентскую машину». FiddlerCore получает ответ от вложенного запроса, но на самом деле у него нет никакого способа «дать» его клиенту, потому что клиент не просил его начать. – EricLaw
Кажется, что мой вопрос сложнее, чем я сначала подумал - я добавил ответ ниже о подходе, который работал для меня. – SheerSt