Вот интерфейс FeignClient:
Код: Выделить всё
@FeignClient(name = "location", value = "location", url = "https://ip.oxylabs.io", configuration = CustomConfiguration.class)
public interface LocationClient {
@GetMapping("/location")
LocationResponse getIp();
}
Код: Выделить всё
public class CustomConfiguration {
@Bean
public Client customClient() {
return new DynamicProxyFeignClient();
}
}
Код: Выделить всё
public class DynamicProxyFeignClient extends Client.Default {
private OkHttpClient client;
public DynamicProxyFeignClient() {
super(null, null);
this.client = buildClient();
}
private OkHttpClient buildClient() {
return new OkHttpClient.Builder()
.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(PROXY_HOST, PROXY_PORT)))
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.connectionPool(new ConnectionPool(500, 20, TimeUnit.SECONDS))
.build();
}
@Override
public Response execute(Request request, Request.Options options) throws IOException {
client = client.newBuilder()
.proxyAuthenticator((route, response) -> {
String credential = Credentials.basic(generateUsername(), PROXY_PASSWORD);
return response.request().newBuilder()
.header("Proxy-Authorization", credential)
.build();
})
.build();
return new feign.okhttp.OkHttpClient(client).execute(request, options);
}
}
Даже если я попытаюсь управлять ротацией прокси на стороне прокси-провайдера, он распознает, что соединение остается прежним, заставляя его использовать один и тот же прокси для нескольких запросов. Мне нужен новый IP-адрес для каждого запроса, что требует изменения идентификатора сеанса или установления нового соединения.
Я попытался изменить заголовок Proxy-Authorization с помощью RequestInterceptor, но это не помогло. проблема, приводящая к ошибке «требуется авторизация прокси». Кажется, заголовок устанавливается в последнем запросе, а не в запросе прокси-сервера.
Как мне реорганизовать свою конфигурацию, чтобы повторно использовать клиент OkHttp, при этом меняя авторизацию прокси-сервера?
Подробнее здесь: https://stackoverflow.com/questions/791 ... ry-request