我无法通过代理使用凭据来获取任何Java实现。
现在我被迫使用bash脚本curl --proxy-user username:password ...
。有没有办法在Java中做同样的事情?
UPD : ,因为我的代理连接身份验证是可选的,我必须使代理使用凭据 在curl示例中
答案 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 用户名:密码完全相同