Повторно используйте клиент okhttp, но меняйте аутентификацию прокси-сервера при каждом запросеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Повторно используйте клиент okhttp, но меняйте аутентификацию прокси-сервера при каждом запросе

Сообщение Anonymous »

У меня есть приложение Spring Boot, использующее клиент Feign с конфигурацией клиента OkHttp. В настоящее время я создаю новый экземпляр OkHttpClient для каждого запроса, чтобы установить другое имя пользователя для проверки подлинности прокси.
Вот интерфейс 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();
}
}
Класс 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-адрес менялся при каждом запросе. Однако я сталкиваюсь с проблемами подключения при большой нагрузке при выполнении многочисленных асинхронных запросов, что приводит к исключению SocketTimeoutException. Мониторинг использования системных сокетов показывает, что для каждого запроса создаются новые соединения.
Даже если я попытаюсь управлять ротацией прокси на стороне прокси-провайдера, он распознает, что соединение остается прежним, заставляя его использовать один и тот же прокси для нескольких запросов. Мне нужен новый IP-адрес для каждого запроса, что требует изменения идентификатора сеанса или установления нового соединения.
Я попытался изменить заголовок Proxy-Authorization с помощью RequestInterceptor, но это не помогло. проблема, приводящая к ошибке «требуется авторизация прокси». Кажется, заголовок устанавливается в последнем запросе, а не в запросе прокси-сервера.
Как мне реорганизовать свою конфигурацию, чтобы повторно использовать клиент OkHttp, при этом меняя авторизацию прокси-сервера?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ry-request
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»