外网代理
背景
在调试本地程序的时候,如果需要访问Google,youtube,aptoide等网站的时候,是需要访问外网的。和直接在浏览器中访问不同,在浏览器中我们只需要挂代理就可以了。但是在程序中,我们需要在Http请求头中添加请求头的代理信息。那么应该如何处理呢?
实际应用
首先需要在本地装好代理,可以使用shadowsocks代理。在本地设置好了代理以后,那么就需要在程序中为Http请求设置好代理信息,也就是proxy信息。具体的程序可以参考以下的内容。
/** 默认字符集 **/
private static final String DEFAULT_CHARSET = "UTF-8";
/** 读超时 **/
//private static final int socket_TIMEOUT = 12000;
private static final int SOCKET_TIMEOUT = 40000;
/** 连接超时 **/
private static final int CONNECT_TIMEOUT = 8000;
//private static final int CONNECT_TIMEOUT = 16000;
/** 从连接池获取连接超时 **/
private static final int CONNECTION_request_TIMEOUT = 2000;
/** 超时设置 **/
private static final RequestConfig REQUEST_CONFIG = RequestConfig
.custom().setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT)
.setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build();
/**连接代理超时设置**/
private static final RequestConfig REQUEST_CONFIG_PROXY=RequestConfig
.custom().setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT)
.setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).setProxy( new HttpHost("127.0.0.1",1080)).build();
/**
* Aptoide get请求参数处理
* @param method
* @param url
* @param params
* @param charset
* @return
*/
private static Httpresponse executeAptoide(HttpMethod method, String url, Map<String, String> params,
String charset) {
HttpRequestBase req = (method == HttpMethod.GET) ? assembleAptoideGet(url, params, charset)
: assemblePost(url, params, charset);
if(url.trim().startsWith("http://ws75.aptoide.com")){
req.setConfig(REQUEST_CONFIG_PROXY);
}else{
req.setConfig(REQUEST_CONFIG);
}
CloseableHttpResponse response = null;
try {
response = HTTP_CLIENT.execute(req);
HttpEntity entity = response.getEntity();
byte[] data = EntityUtils.toByteArray(entity);
return new HttpResponse(response.getStatusLine().getStatusCode(), data,
charset == null ? null : new String(data, charset));
} catch (SocketTimeoutException e) {
return new HttpResponse(HttpStatus.SC_GATEWAY_TIMEOUT, e);
} catch (ConnectTimeoutException e) {
return new HttpResponse(HttpStatus.SC_BAD_GATEWAY, e);
} catch (IOException e) {
return new HttpResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, e);
} finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
}
}
}
}
相关阅读
反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文
阅读Java源码的
【转载】java中int转string,string转int 及其效率对比
尊重原创,原文传送门string转int,两种方法:1、Interger.parseInt(String)2、Interger.valueOf(String).intValue()第二种方法可以去
在使用MarkDownHere的时候,需要利用CSS编辑各个段落的格式,本文记录了CSS中编辑格式的各个属性及其设置。 行距 行距一般使用line-h
Java开发者推荐的几种常用工具,Java程序员最喜欢的几款IDE编辑器 这篇文章主要为大家详细介绍了Java开发者推荐的10种常用工具,具