Java请求通过代理与凭据

时间:2016-12-08 14:56:08

标签: java http proxy client credentials

我无法通过代理使用凭据来获取任何Java实现。

现在我被迫使用bash脚本curl --proxy-user username:password ...。有没有办法在Java中做同样的事情?

UPD ,因为我的代理连接身份验证是可选的,我必须使代理使用凭据 在curl示例中

2 个答案:

答案 0 :(得分:1)

如果您使用的是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());

    }
    }

答案 1 :(得分:1)

在网上冲浪之后,我得到了这个非常适合我的问题的答案

创建 Rest Client Base 类,使其适用于所有 Rest 模板调用

公共类 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 用户名:密码完全相同