Android之HttpClient和HttpUrlConnection
来源:互联网 发布:360游戏优化器安卓版 编辑:程序博客网 时间:2024/04/29 10:24
Android中提供了两种网络请求方式,一种是使用Apache的HttpClient,或者使用使用Java的HttpUrlConnection。本文主要介绍Httpclient.
使用HttpClient的一般步骤
- 使用DefaultHttpCLient类实例化一个HttpClient的实例。
- 创建HttpGet或者HttpPost对象,并将要访问的Url传入进去
- 使用httpclient对象执行HttpGet(HttpPost)对象,并得到相应的HttpResponse对象
通过HttpResponse接口getEntity方法,获得响应信息,再做进一步处理。
public void sendGetRequest(String url){
HttpClient httpClient = new DefaultHttpClient(defaultParams());
//创建HttpGet对象
HttpGet httpget = new HttpGet(url);
//添加头部
httpget.addHeader(“connection”,”Keep-Alive”);
//执行请求操作
HttpResponse response = httpClient.excute(httpget);
HttpEntity entity = response.getEntiry();
if(entiry!=null){
InputStream is = entity.getContent();
//解析结果
String result = convertStream2String(is);
is.close();
}
}public static HttpParams defaultParams(){
HttpParams mDefaultParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeOut(mDefaultParams,10000);
HttpConnectionParams.setSoTimeOut(mDefaultParams,15000);
HttpConnectionParam.setNoDelay(mDefaultParams,true);//关闭就连接检查的配置为falseHttpConntionParams.setStaleCheckingEnable(mDfaultParams,false);//协议参数HttpProtocalParams.setVersion(mDefaultsParams,HttpVersion.HTTP_1_1);//持续握手HttpProtocolParams.setUseExpectionContinue(mdefaultParams,false);return mDefaultParams;
}
注意:使用HttpGet调用时,url的参数暴露在URL中。并且长度限制在2048个字符之内(HTTP1.1之后URL的长度才没有限制)。
HttpUrlConnection
引入HttpUrlConnetion的原因
HttpClient已经能够满足我们的需求,那么为什么还要用HttpUrlconnection呢? 这是因为在ANdorid2.2呢?这是因为在Android2.2版本之前,JttpClient用为较少的Bug,而HttpUrlConneciton一直存在令人讨厌的bug。例如:一个可读的InputStream调用close()方法时,就有可能导致连接池失效。因此在android2.2之前使用HttpClient是比较好的。而在Android2.2之后,使用HttpUrlConnection是比较明智的。它提供的压缩、缓存机制可以有效的减少网络访问。
public void sendRequest(String url) throws IOException{ InputStream is = null; try{ URL newUrl = new URL(url); HttpUrlConnection conn = (HttpUrlConnection)newUrl.openConnection(); //设置读取的超时时间 conn.setReadTimeOut(1000); //设置连接的超时时间 conn.setConnectionTimeOut(1500); //设置可读数据 conn.setDoInput(true); //设置可传数据 conn.setDoOutPut(true); //设置保持长连接 conn.setRequestProperties("connection","keep-Alive"); //设置请求方式 conn.setRequestMethod("POST"); //添加请求参数 List<NameValuePair> paramsList = new ArrayList<NameValuePair>(); /传入相应的键值对 paramsList.add(new BasicNameValuePair("username","mr.simple")); paramsList.add(new BasicNameValuePair("pwd","mypwd")); //将参数和连接进行关联 writeParams(conn.getOutStream(),paramsList); //发起请求 conn.connect(); is = conn.getInputStream(); //获取请求结果 String result = converStream2String(is); Log.e("","### 请求结果:" + result); }finally{ if(is!=null){ is.close(); } }}public void writeParams(OutPutStream out , List<NameValuePaire> paramsList){ StringBuilder sb = new StringBuilder(); for(NameValuePair pair: paramsList){ if(!TextUtils.isEmpty(sb)){ sb.append("&"); } sb.append(URLEncoder.encode(pair.getName(),"utf-8")); sb.append("="); sb.append(URLEncoder.encode(pair.getValue(),"utf-8"); } BufferedWriter bw = new BufferWriter(new OutpuStreamWriter(out,"utf-8")); bw.write(sb.toString()); bw.flush(); bw.close();}
注意:
* 使用HttpUrlConnection时需要注意,如果我们要添加参数,那么需要调用HttpUrlConeneciton对象的setDoOutput(true)方法来启动输出功能。不同的请求方式是通过HttpUrlConnection的setRequestMethod()来进行设置。
* 如果是get请求,一定不要在请求体中传入参数,否则会变为post请求。
- Android之HttpClient和HttpUrlConnection
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络访问之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android--网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- postfix空壳邮件
- Search in Rotated Sorted Array
- c语言实现的简单学生管理系统
- Android Retrofit2使用教程-小白篇
- 1293: [SCOI2009]生日礼物
- Android之HttpClient和HttpUrlConnection
- *无向图求割点+点双连通分量——Tarjan
- 我要六一儿童节礼物!!DecoratorPattern----装饰模式
- 如何用SVG做出背景填充效果(avatar)
- java从入门到弃坑数据库0 0
- 直接插入排序
- React-JSX-常量定义与使用
- Java TCP 客户端和服务端之间的使用
- oj350. Intersection of Two Arrays II