由于需求在上次的的代码当中需要程序发出Http请求,而在Python中依赖Urlopen/urlib这种库,在Java当中有Http包,但是具体还需去做:
在此之前先搞清URI 和URL的区别以及http请求的一些东西,之前发过->http://stringair.xin/?p=60
在搞清楚这些之后得先知道一些Java中URI/URL方法,其中包括了Encode和Decode这些基础的东西(和py一样,注意URL中包含汉字和空格特殊字符的处理办法。)
可以处理封装http请求(之前在Servlet当中有说过几种基础的方法,在其当中是枚举类,所以在使用的时候注意一下就好//拿最经典的GET和POST):
public class HttpUtil {
private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class);
public static final String CHARSET = "utf-8";
public static final int SUCCESS = 200;
private static CloseableHttpClient httpclient;
static {
// 连接管理器,使用无惨构造
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
// 最大连接数
connManager.setMaxTotal(512);
// 默认的每个路由的最大连接数
connManager.setDefaultMaxPerRoute(512);
RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(3 * 1000) // 连接超时时间
.setSocketTimeout(3 * 1000) // 读超时时间(等待数据超时时间)
.setConnectionRequestTimeout(10 * 1000).build(); // 从池中获取连接超时时间
httpclient = HttpClients.custom()
.setConnectionManager(connManager) // 连接管理器
.setDefaultRequestConfig(defaultRequestConfig) // 默认请求配置
.build();
}
public static String get(String url) {
logger.info("request[GET] url: " + url);
HttpGet httpGet = new HttpGet(url);
String content = invoke(httpclient, httpGet);
return content;
}
public static String post(String url, JSONObject params) {
logger.info("request[POST] url: " + url + " params: " + params.toJSONString());
HttpPost post = postForm(url, params);
String body = invoke(httpclient, post);
return body;
}
}
不仅如此,亦可封装更多的请求参数进去,看需求,在使用的时候直接使用就好,这块先留个坑,因为在java的http包当中还有Apache的请求池的包,目前看的够呛也不知道用途很难受,目前这个手动自装Apache.httpclient美滋滋。