@ apsisim предоставили отличную идею для использования веб-прокси. но инструмент, который он предлагает, отсутствует в репозитории Maven и имеет коммерческую лицензию что сработало для меня:
запустите шлюз, чтобы он использовал прокси-сервер (вы можете потренироваться и найти свободный порт):
private const val proxyPort = 1080
@SpringBootTest(
properties = [
//"logging.level.reactor.netty.http.server=debug",
//"spring.cloud.gateway.httpserver.wiretap=true",
//"spring.cloud.gateway.httpclient.wiretap=true",
"spring.cloud.gateway.httpclient.proxy.host=localhost",
"spring.cloud.gateway.httpclient.proxy.port=$proxyPort"
]
)
, затем использовать mockwebserver в качестве прокси
testImplementation("com.squareup.okhttp3:mockwebserver:4.2.1")
testImplementation("com.squareup.okhttp3:okhttp:4.2.1")
, и тогда все ваши запросы будут go на ваш прокси. просто помните, что протокол http указывает, что первый запрос к новому серверу требует туннелирования через прокси, поэтому, когда вы делаете первый запрос к шлюзу, шлюз отправит 2 запроса к прокси:
testClient.get()
.uri(path)
.header("host", gatewayDns)
.exchange()
nextRequestFromGateway {
method `should equal` "CONNECT"
headers[HOST] `should equal` "$realUrlBehindGateway:80"
}
nextRequestFromGateway {
path `should equal` "/api/v1/whatever"
headers[HOST] `should equal` realUrlBehindGateway
}
...
fun nextRequestFromGateway(block : RecordedRequest.() -> Unit) {
mockWebServer.takeRequest().apply (block)
}