use*_*362 13 java proxy client jersey
嗨,我有一个用于上传文件的球衣客户端.我尝试在本地使用它,一切正常.但在生产环境中,我要设置代理.我浏览了几页,但无法得到确切的解决方案.有人可以帮我这个吗?
这是我的客户代码:
File file = new File("e:\\test.zip");
FormDataMultiPart part = new FormDataMultiPart();
part.bodyPart(new FileDataBodyPart("file", file, MediaType.APPLICATION_OCTET_STREAM_TYPE));
WebResource resource = null;
if(proxy.equals("yes")){
//How do i configure client in this case?
}else{
//this uses system proxy i guess
resource = Client.create().resource(url);
}
String response = (String)resource.type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, part);
System.out.println(response);
Run Code Online (Sandbox Code Playgroud)
luc*_*uke 15
如果您想在遗留项目中避免使用更多库并且不需要代理身份验证,则有一种更简单的方法:
首先,你需要一个实现的类HttpURLConnectionFactory:
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import com.sun.jersey.client.urlconnection.HttpURLConnectionFactory;
public class ConnectionFactory implements HttpURLConnectionFactory {
Proxy proxy;
private void initializeProxy() {
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxy.com", 3128));
}
public HttpURLConnection getHttpURLConnection(URL url) throws IOException {
initializeProxy();
return (HttpURLConnection) url.openConnection(proxy);
}
}
Run Code Online (Sandbox Code Playgroud)
第二是实例化 com.sun.jersey.client.urlconnection.URLConnectionHandler
URLConnectionClientHandler ch = new URLConnectionClientHandler(new ConnectionFactory());
Run Code Online (Sandbox Code Playgroud)
第三是使用Client构造函数而不是Client.create:
Client client = new Client(ch);
Run Code Online (Sandbox Code Playgroud)
当然,您可以自定义代理的初始化ConnectionFactory.
小智 12
luckyluke的回答应该有效.这是我的版本:
ClientConfig config = new DefaultClientConfig();
Client client = new Client(new URLConnectionClientHandler(
new HttpURLConnectionFactory() {
Proxy p = null;
@Override
public HttpURLConnection getHttpURLConnection(URL url)
throws IOException {
if (p == null) {
if (System.getProperties().containsKey("http.proxyHost")) {
p = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress(
System.getProperty("http.proxyHost"),
Integer.getInteger("http.proxyPort", 80)));
} else {
p = Proxy.NO_PROXY;
}
}
return (HttpURLConnection) url.openConnection(p);
}
}), config);
Run Code Online (Sandbox Code Playgroud)
干得好:
DefaultApacheHttpClient4Config config = new DefaultApacheHttpClient4Config();
config.getProperties().put(
ApacheHttpClient4Config.PROPERTY_PROXY_URI,
"PROXY_URL"
);
config.getProperties().put(
ApacheHttpClient4Config.PROPERTY_PROXY_USERNAME,
"PROXY_USER"
);
config.getProperties().put(
ApacheHttpClient4Config.PROPERTY_PROXY_PASSWORD,
"PROXY_PASS"
);
Client c = ApacheHttpClient4.create(config);
WebResource r = c.resource("https://www.google.com/");
Run Code Online (Sandbox Code Playgroud)