最近在做微信公众号开发,需要用java代码访问微信端接口来请求数据。
由于博主java的网络通信也不是很精通,只是粗略了解皮毛,等以后知识上来了再深入研究java的网络编程。
所以这篇文章就先介绍简单使用。
需要的jar包:
org.apache.httpcomponents
httpclient
4.3.6
org.apache.httpcomponents
httpcore
4.4
本篇博客分为几块部分:http的get、post请求,https的get、post请求
新建一个类HttpUtil:
public class HttpUtil {
private static PoolingHttpClientConnectionManager connMgr;
private static RequestConfig requestConfig;
private static final int MAX_TIMEOUT = 7000;
static {
// 设置连接池
connMgr = new PoolingHttpClientConnectionManager();
// 设置连接池大小
connMgr.setMaxTotal(100);
connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
RequestConfig.Builder configBuilder = RequestConfig.custom();
// 设置连接超时
configBuilder.setConnectTimeout(MAX_TIMEOUT);
// 设置读取超时
configBuilder.setSocketTimeout(MAX_TIMEOUT);
// 设置从连接池获取连接实例的超时
configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
// 在提交请求之前 测试连接是否可用
configBuilder.setStaleConnectionCheckEnabled(true);
requestConfig = configBuilder.build();
}
}
http部分
get请求:
/**
* 发送 GET 请求(HTTP),不带输入数据
*
* @param url
* @return
*/
public static String doGet(String url) {
return doGet(url, new HashMap());
}
/**
* 发送 GET 请求(HTTP),K-V形式
*
* @param url
* @param params
* @return
*/
public static String doGet(String url, Map params) {
String apiUrl = url;
StringBuffer param = new StringBuffer();
//拼接get请求参数
int i = 0;
for (String key : params.keySet()) {
if (i == 0)
param.append(“?”);
else
param.append(“&”);
param.append(key).append(“=”).append(params.get(key));
i++;
}
//往url后面添加所有的请求参数
apiUrl += param;
String result = null;
//开始执行get请求,新建一个DefaultHttpClient对象
HttpClient httpclient = new DefaultHttpClient();
try {
//新建一个处理特定url的HttpGet对象
HttpGet httpGet = new HttpGet(apiUrl);
//执行请求,得到response对象
HttpResponse response = httpclient.execute(httpGet);
//获取响应状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(“执行状态码 : ” + statusCode);
HttpEntity entity = response.g