Как обрабатывать запросы «Обнаружена сквозная петля» в 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-сервера на другом порту для обработки этих дополнительных конечных точек. Будет ли это лучшим решением?

0 ответов

Другие вопросы по тегам