由于需求在上次的的代码当中需要程序发出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美滋滋。