Как обрабатывать запросы «Обнаружена сквозная петля» в Mockttp
Я настроил Mockttp для перехвата HTTPS-запросов и ведения журналов с помощью такого правила:
import * as mockttp from 'mockttp'
const https = await mockttp.generateCACertificate()
const caFingerprint = mockttp.generateSPKIFingerprint(https.cert)
const server = mockttp.getLocal({ https })
await server.forAnyRequest().matching(request => doesMatchCriteria(request)).thenPassThrough({
beforeRequest: request => doSomethingWithRequest(request),
beforeResponse: response => doSomethingWithResponse(response)
})
Все работает так, как ожидалось, мой браузер указывает на этот прокси-сервер с довереннымcaFingerprint
ценить. Запросы проходят иbeforeRequest
иbeforeResponse
звонят.
Я также хотел бы иметь возможность отправлять HTTP-запросы к самому прокси-серверу во время его работы, чтобы динамически настраивать поведение ведения журнала, но я пытаюсь определить правило для перехвата всех таких запросов.
Я попытался определить отдельные правила следующим образом:
await server.forGet(`/some/path`).forPort(server.port).always().thenCallback(callbackFn)
По этому правилу любоеGET
запросить/some/path
на порту, на котором работает Mockttp, это обрабатывается. Но мне бы хотелось иметь возможность захватывать все запросы, а не только отдельные пути.
Я мог бы сделать что-то вроде этого:
await server.forAnyRequest().forPort(server.port).always().thenCallback(callback)
Но это правило будет обрабатывать все запросы на один и тот же порт, даже если они предназначены для другого сервера. Например, если это порт 8000, то запросы к example.com:8000 также будут обрабатываться им, хотя я хочу обрабатывать запросы только к самому прокси-серверу.
Я заметил, что когда сервер работает на порту 8000 и я делаю запрос, например, к localhost:8000/some/path/not/defined/by/a/rule, я получаю эту ошибку:
Не удалось обработать запрос: обнаружена сквозная петля. Вероятно, это означает, что вы отправляете запрос непосредственно в конечную точку транзитного доступа, которая перенаправляет его на целевой URL-адрес, который является конечной точкой транзитного доступа, которая пересылает его на целевой URL-адрес, который является конечной точкой транзитного доступа...
Мне бы хотелось определить правило, которое будет обрабатывать все запросы, в которых обнаружен сквозной цикл, чтобы я мог обрабатывать все запросы, сделанные, например, к localhost:8000 или 127.0.0.1:8000 или my-mockttp-proxy-server:8000. Есть ли способ сделать это?
В качестве альтернативы я рассматриваю возможность запуска отдельного http-сервера на другом порту для обработки этих дополнительных конечных точек. Будет ли это лучшим решением?