kelovp.
首页 Java Java当中的一些网络请求

Java当中的一些网络请求

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

text
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美滋滋。

K
kelovp
后端工程师 · 广告投放 / 商业化
八年后端,做广告投放与商业化变现系统,现在带团队折腾商业化中台与 AIGC 内容平台。工作之外写点电子音乐、动漫解析和故事。相信把事情想清楚,才写得明白。