Java-запрос через прокси с учетными данными

Я не могу получить реализацию Java, чтобы сделать http-запрос через прокси с учетными данными.

Теперь я вынужден использовать скрипт bash curl --proxy-user username:password ..., Есть ли способ сделать то же самое в Java?

UPD: так как аутентификация моего прокси-соединения не является обязательной, я должен сделать прокси для использования учетных данных, как в примере с curl

2 ответа

Если вы используете Java 6 или выше, вы можете использовать класс Proxy.

https://docs.oracle.com/javase/7/docs/api/java/net/Proxy.html

Пример использования будет выглядеть ниже

HttpURLConnection conn;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("www.proxyserver.com", YOUR_PROXY_PORT));

URL httpUrl = new URL("http://www.google.com");
        conn = (HttpURLConnection) httpUrl.openConnection(proxy);

Чтобы подтвердить ваш доступ https://docs.oracle.com/javase/7/docs/api/java/net/Authenticator.html

Authenticator.setDefault(new MyAuthenticator());

public  class MyAuthenticator extends Authenticator {


    protected PasswordAuthentication getPasswordAuthentication() {

        String username = "yourUserName";
        String password = "YourPassword";
        return new PasswordAuthentication(username, password.toCharArray());

    }
    }

После долгого серфинга я получил этот ответ, который идеально подходит для моего вопроса.

Создайте класс Rest Client Base, чтобы его можно было применить для всех остальных вызовов шаблона.

открытый класс RestClientBase { частный RestTemplate restTemplate = null;

      protected RestTemplate getTemplate() {
    string username = "username";
    String Password = "password";

    if (restTemplate == null) {
        SimpleClientHttpRequestFactory clientHttpReq = new SimpleClientHttpRequestFactory();
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("Proxy URL", PROXY_PORT)); // PROXY PORT needs to be integer
        clientHttpReq.setProxy(proxy);

        restTemplate = new RestTemplate(clientHttpReq);
        restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor(username, Password));
    }

    return restTemplate;
}

}

Теперь наследуйте этот класс в своем фактическом клиентском классе отдыха, где вы вызываете другую конечную точку API.

открытый класс ActualClientClass расширяет RestClientBase {

      public String invokeActualService(String restAPINeedingUserNamePwdURL, class.String) {

    String result = getTemplate().getForObject(restAPINeedingUserNamePwdURL, String.class);

}

}

Просто чтобы подчеркнуть, это точно выполняет ту же задачу, что и curl --proxy-user username:password

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