HttpClient 和 HttpURLConnection

现在已经不推荐使用HttpClient了,从Android Level 23(Android 6.0)开始,已经强制使用HttpURLConnection了,著名的第三方库AsynHttpClient用的就是HttpClient,虽然提供了一个可以在6.0上使用HttpClient的包,但是已经不再维护了。

现在大家用的比较多的就是OkhttpVolleyRetrofit,选择哪个全看你自己的需求,但是我理解都是需要再封装一下才能比较方便地使用。

下面说一下HttpURLConnection

所有的网络请求,是不允许在主线程中的,因为可能会阻塞主线程,造成ANR,所以网络请求都要这样使用:

new Thread(new Runnable(){
	//具体的http请求代码
});

setRequestMethod设置请求方式GET或POST
setConnectTimeout设置连接建立的超时时间
setReadTimeout设置请求的超时时间
setDoOutput默认为false,设置是否向HttpURLConnection输出
setDoInput默认为true,设置是否从HttpURLConnection读入
setRequestProperty设置请求头

下面是示例

URL url = new URL(urlString);
//通过调用URL对象openConnection()方法来创建URLConnection对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(3 * 1000);
connection.setReadTimeout(10 * 1000);
//在对各种参数配置完成后,通过调用connect方法建立TCP连接,但是并未真正获取数据
//conn.connect()方法不必显式调用,当调用conn.getInputStream()方法时内部也会自动调用connect方法
connection.connect();
if (200 == connection.getResponseCode()) {
    InputStream is = connection.getInputStream();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len;
    while ((len = is.read(buffer)) != -1) {
        baos.write(buffer, 0, len);
    }
    final String resp = baos.toString();
    baos.close();
    is.close();
} else {
    // 请求失败
}
Show Comments