现在已经不推荐使用HttpClient了,从Android Level 23(Android 6.0)开始,已经强制使用HttpURLConnection了,著名的第三方库AsynHttpClient
用的就是HttpClient,虽然提供了一个可以在6.0上使用HttpClient的包,但是已经不再维护了。
现在大家用的比较多的就是Okhttp
、Volley
、Retrofit
,选择哪个全看你自己的需求,但是我理解都是需要再封装一下才能比较方便地使用。
下面说一下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 {
// 请求失败
}