httpclient和urlconnection的区别

首先:在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能:HttpURLConnection。但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。 
在Android中,androidSDK中集成了Apache的HttpClient模块,用来提供高效的、最新的、功能丰富的支持 HTTP 协议工具包,并且它支持 HTTP 协议最新的版本和建议。使用HttpClient可以快速开发出功能强大的Http程序。 
其次:HttpClient是个很不错的开源框架,封装了访问http的请求头,参数,内容体,响应等等, 

HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便,比如重访问的自定义,以及一些高级功能等。

HttpClient就是一个增强版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。 

使用HttpClient发送请求、接收响应很简单,只要如下几步即可: 
1.创建HttpClient对象。 
2.如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。 
3.如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。 
4.调用HttpClient对象的execute(HttpUriRequest request)发送请求,执行该方法返回一个HttpResponse。 
5.调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 

具体对比如下:HTTPClient

String url = "http://192.168.1.100:8080";  
public HttpClientServer(){ }  
public String doGet(String username,String password){  
   String getUrl = urlAddress + "?username="+username+"&password="+password;  
   HttpGet httpGet = new HttpGet(getUrl);  
   HttpParams hp = httpGet.getParams();  
   hp.getParameter("true");  
  //httpGet.setp  
  HttpClient hc = new DefaultHttpClient();  
     try {  
     HttpResponse ht = hc.execute(httpGet);  
     if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
      HttpEntity he = ht.getEntity();  
      InputStream is = he.getContent();  
      BufferedReader br = new BufferedReader(new InputStreamReader(is));  
      String response = "";  
      String readLine = null;  
      while((readLine =br.readLine()) != null){  
       //response = br.readLine();  
      response = response + readLine;  
   }  
   is.close();  
   br.close();  
//String str = EntityUtils.toString(he);  
    return response;  
}else{  
    return "error";  
  }  
} catch (ClientProtocolException e) {  
   e.printStackTrace();  
   return "exception";  
} catch (IOException e) {  
   e.printStackTrace();  
  return "exception";  
  }  

 public String doPost(String username,String password){  
     //String getUrl = urlAddress + "?username="+username+"&password="+password;  
     HttpPost httpPost = new HttpPost(urlAddress);  
     List params = new ArrayList();  
     NameValuePair pair1 = new BasicNameValuePair("username", username);  
     NameValuePair pair2 = new BasicNameValuePair("password", password);  
     params.add(pair1);  
     params.add(pair2);  
     HttpEntity he;  
     try {  
         he = new UrlEncodedFormEntity(params, "gbk");  
         httpPost.setEntity(he);  
      } catch (UnsupportedEncodingException e1) {  
        e1.printStackTrace();  
  }  

  HttpClient hc = new DefaultHttpClient();  
      try {  
        HttpResponse ht = hc.execute(httpPost);  
       //连接成功  
       if(ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK){  
       HttpEntity het = ht.getEntity();  
       InputStream is = het.getContent();  
       BufferedReader br = new BufferedReader(new InputStreamReader(is));  
       String response = "";  
       String readLine = null;  
       while((readLine =br.readLine()) != null){  
       //response = br.readLine();  
      response = response + readLine;  
    }  
    is.close();  
    br.close();  
  //String str = EntityUtils.toString(he);  
     return response;  
  }else{  
     return "error";  
  }  
  } catch (ClientProtocolException e) {  
    e.printStackTrace();  
    return "exception";  
  } catch (IOException e) {  
    e.printStackTrace();  
    return "exception";  
   }  

HttpURLConnection: 

String url = "http://192.168.1.100:8080";  
URL url;  
HttpURLConnection uRLConnection;  
public UrlConnectionToServer(){ } 
//向服务器发送get请求 
public String doGet(String username,String password){  
String getUrl = urlAddress + "?username="+username+"&password="+password;  
try {  
url = new URL(getUrl);  
uRLConnection = (HttpURLConnection)url.openConnection();  
InputStream is = uRLConnection.getInputStream();  
BufferedReader br = new BufferedReader(new InputStreamReader(is));  
String response = "";  
String readLine = null;  
while((readLine =br.readLine()) != null){  
//response = br.readLine();  
response = response + readLine;  
}  
is.close();  
br.close();  
uRLConnection.disconnect();  
return response;  
} catch (MalformedURLException e) {  
e.printStackTrace();  
returnnull;  
} catch (IOException e) {  
e.printStackTrace();  
returnnull;  
}  
}  
//向服务器发送post请求 
public String doPost(String username,String password){  
try {  
url = new URL(urlAddress);  
uRLConnection = (HttpURLConnection)url.openConnection();  
uRLConnection.setDoInput(true);  
uRLConnection.setDoOutput(true);  
uRLConnection.setRequestMethod("POST");  
uRLConnection.setUseCaches(false);  
uRLConnection.setInstanceFollowRedirects(false);  
uRLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
uRLConnection.connect();  
DataOutputStream out = new DataOutputStream(uRLConnection.getOutputStream());  
String content = "username="+username+"&password="+password;  
out.writeBytes(content);  
out.flush();  
out.close();  
InputStream is = uRLConnection.getInputStream();  
BufferedReader br = new BufferedReader(new InputStreamReader(is));  
String response = "";  
String readLine = null;  
while((readLine =br.readLine()) != null){  
//response = br.readLine();  
response = response + readLine;  
}  
is.close();  
br.close();  
uRLConnection.disconnect();  
return response;  
} catch (MalformedURLException e) {  
e.printStackTrace();  
returnnull;  
} catch (IOException e) {  
  e.printStackTrace();  
  returnnull;  
 }  

客户端操作:

String url = "http://192.168.1.102:8080";  
String body =  
getContent(urlAddress);  
JSONArray array = new JSONArray(body);  
for(int i=0;i<array.length();i++)  
{  
obj = array.getJSONObject(i);  
sb.append("用户名:").append(obj.getString("username")).append("\t");  
sb.append("密码:").append(obj.getString("password")).append("\n");  

HashMap<String, Object> map = new HashMap<String, Object>();  
try {  
userName = obj.getString("username");  
passWord = obj.getString("password");  
} catch (JSONException e) {  
e.printStackTrace();  
}  
map.put("username", userName);  
map.put("password", passWord);  
listItem.add(map);  
}  
} catch (Exception e) {  
e.printStackTrace();  
}  
if(sb!=null)  
{  
showResult.setText("用户名和密码信息:");  
showResult.setTextSize(20);  
} else 
extracted();  
//设置adapter  
SimpleAdapter simple = new SimpleAdapter(this,listItem,  
android.R.layout.simple_list_item_2,  
new String[]{"username","password"},  
newint[]{android.R.id.text1,android.R.id.text2});  
listResult.setAdapter(simple);  

listResult.setOnItemClickListener(new OnItemClickListener() {  
@Override  
publicvoid onItemClick(AdapterView<?> parent, View view,  
int position, long id) {  
int positionId = (int) (id+1);  
Toast.makeText(MainActivity.this, "ID:"+positionId, Toast.LENGTH_LONG).show();  
}  
});  
}  
privatevoid extracted() {  
showResult.setText("没有有效的数据!");  
}  
//和服务器连接  
private String getContent(String url)throws Exception{  
StringBuilder sb = new StringBuilder();  
HttpClient client =new DefaultHttpClient();  
HttpParams httpParams =client.getParams();  
HttpConnectionParams.setConnectionTimeout(httpParams, 3000);  
HttpConnectionParams.setSoTimeout(httpParams, 5000);  
HttpResponse response = client.execute(new HttpGet(url));  
HttpEntity entity =response.getEntity();  
if(entity !=null){  
BufferedReader reader = new BufferedReader(new InputStreamReader  
(entity.getContent(),"UTF-8"),8192);  
String line =null;  
while ((line= reader.readLine())!=null){  
sb.append(line +"\n");  
}  
reader.close();  
}  
return sb.toString();  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值