Java当中的一些网络请求

/ 0评 / 1

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注