您的位置:首页 > 理论基础 > 计算机网络

android httpClient和URLConnection的区别

2014-04-25 17:28 246 查看
摘自:http://blog.csdn.net/lixiaopeng23/article/details/9799197

这个比较吊:/article/1562129.html

首先:在 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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: