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

httpclient实例

2015-08-24 11:34 513 查看

在Android开发中,AndroidSDK附带了Apache的HttpClient,它是一个完善的客户端。它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTPGET和HTTPPOST调用。HTTP工作原理:
1.客户端(一般是指浏览器,这里是指自己写的程序)与服务器建立连接2.建立连接后,客户端向服务器发送请求3.服务器接收到请求后,向客户端发送响应信息4.客户端与服务器断开连接HttpClient的一般使用步骤:
1.使用DefaultHttpClient类实例化HttpClient对象
2.创建HttpGet或HttpPost对象,将要请求的URL通过构造方法传入HttpGet或HttpPost对象。
3.调用execute方法发送HTTPGET或HTTPPOST请求,并返回HttpResponse对象。4.通过HttpResponse接口的getEntity方法返回响应信息,并进行相应的处理。最后记得要在AndroidManifest.xml文件添加网络权限
<uses-permissionandroid:name="android.permission.INTERNET"/>


这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开。

先贴代码:

01
publicclassActivity1extendsActivity{
02

03
privatefinalStringDEBUG_TAG="System.out";
04

05
privateTextViewmTextView;
06
privateButtonmButton;
07

08
protectedvoidonCreate(BundlesavedInstanceState){
09
super.onCreate(savedInstanceState);
10
setContentView(R.layout.main);
11

12
mTextView=(TextView)findViewById(R.id.TextView01);
13
mButton=(Button)findViewById(R.id.Button01);
14
mButton.setOnClickListener(newhttpListener());
15
}
16

17
//设置按钮监听器
18
classhttpListenerimplementsOnClickListener{
19
publicvoidonClick(Viewv){
20
refresh();
21
}
22
}
23

24
privatevoidrefresh(){
25
StringhttpUrl="http://192.168.0.101:8080/Test/test.jsp";
26
//URL可以加参数
27
//StringhttpUrl=
28
//"http://192.168.0.101:8080/Test/test.jsp?par=abcdefg";
29
StringresultData="";
30
URLurl=null;
31
try{
32
//创建一个URL对象
33
url=newURL(httpUrl);
34
}catch(MalformedURLExceptione){
35
Log.d(DEBUG_TAG,"createURLException");
36
}
37
//声明HttpURLConnection对象
38
HttpURLConnectionurlConn=null;
39
//声明InputStreamReader对象
40
InputStreamReaderin=null;
41
//声明BufferedReader对象
42
BufferedReaderbuffer=null;
43
StringinputLine=null;
44
if(url!=null){
45
try{
46
//使用HttpURLConnection打开连接
47
urlConn=(HttpURLConnection)url.openConnection();
48
//得到读取的内容(流)
49
in=newInputStreamReader(urlConn.getInputStream());
50
//创建BufferReader对象,输出时候用到
51
buffer=newBufferedReader(in);
52
//使用循环来读取数据
53
while((inputLine=buffer.readLine())!=null){
54
//在每一行后面加上换行
55
resultData+=inputLine+"\n";
56
}
57
//设置显示取的的内容
58
if(resultData!=null&&!resultData.equals("")){
59
mTextView.setText(resultData);
60
}else{
61
mTextView.setText("读取的内容为空");
62
}
63
}catch(IOExceptione){
64
e.printStackTrace();
65
}finally{
66
try{
67
//关闭InputStreamReader
68
in.close();
69
//关闭URL连接
70
urlConn.disconnect();
71
}catch(IOExceptione){
72
e.printStackTrace();
73
}
74
}
75
}else{
76
Log.d(DEBUG_TAG,"URLisNULL");
77
}
78
}
79
}

第二种方式:

001
publicclassActivity2extendsActivity{
002

003
privatefinalStringDEBUG_TAG="System.out";
004

005
privateTextViewmTextView;
006
privateButtonmButton;
007

008
protectedvoidonCreate(BundlesavedInstanceState){
009
super.onCreate(savedInstanceState);
010
setContentView(R.layout.main);
011

012
mTextView=(TextView)findViewById(R.id.TextView01);
013
mButton=(Button)findViewById(R.id.Button01);
014
mButton.setOnClickListener(newhttpListener());
015
}
016

017
//设置按钮监听器
018
classhttpListenerimplementsOnClickListener{
019
publicvoidonClick(Viewv){
020
refresh();
021
}
022
}
023

024
privatevoidrefresh(){
025
StringhttpUrl="http://192.168.0.101:8080/Test/test.jsp";
026
StringresultData="";
027
URLurl=null;
028
try{
029
//创建一个URL对象
030
url=newURL(httpUrl);
031
}catch(MalformedURLExceptione){
032
Log.d(DEBUG_TAG,"createURLException");
033
}
034
//声明HttpURLConnection对象
035
HttpURLConnectionurlConn=null;
036
//声明InputStreamReader对象
037
InputStreamReaderin=null;
038
//声明BufferedReader对象
039
BufferedReaderbuffer=null;
040
StringinputLine=null;
041
//声明DataOutputStream流
042
DataOutputStreamout=null;
043
if(url!=null){
044
try{
045
//使用HttpURLConnection打开连接
046
urlConn=(HttpURLConnection)url.openConnection();
047
//因为这个是POST请求所以要设置为true
048
urlConn.setDoInput(true);
049
urlConn.setDoOutput(true);
050
//设置POST方式
051
urlConn.setRequestMethod("POST");
052
//POST请求不能设置缓存
053
urlConn.setUseCaches(false);
054
urlConn.setInstanceFollowRedirects(false);
055
//配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
056
urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
057
//连接,从postUrl.openConnection()至此的配置必须要在connect之前完成
058
//要注意的是connectio.getOutputStream会隐含的进行connect
059
urlConn.connect();
060
//DataOutputStream流
061
out=newDataOutputStream(urlConn.getOutputStream());
062
Stringcontent="par="+URLEncoder.encode("abcdefg","gb2312");
063
//将要上传的内容写入流中
064
out.writeBytes(content);
065
//得到读取的内容(流)
066
in=newInputStreamReader(urlConn.getInputStream());
067
//创建BufferReader对象,输出时候用到
068
buffer=newBufferedReader(in);
069
//使用循环来读取数据
070
while((inputLine=buffer.readLine())!=null){
071
//在每一行后面加上换行
072
resultData+=inputLine+"\n";
073
}
074
//设置显示取的的内容
075
if(resultData!=null&&!resultData.equals("")){
076
mTextView.setText(resultData);
077
}else{
078
mTextView.setText("读取的内容为空");
079
}
080
}catch(IOExceptione){
081
e.printStackTrace();
082
}finally{
083
try{
084
//刷新DataOutputStream流
085
out.flush();
086
//关闭DataOutputStream流
087
out.close();
088
//关闭InputStreamReader
089
in.close();
090
//关闭URL连接
091
urlConn.disconnect();
092
}catch(IOExceptione){
093
e.printStackTrace();
094
}
095
}
096
}else{
097
Log.d(DEBUG_TAG,"URLisNULL");
098
}
099
}
100
}

第三种方式

01
publicclassActivity3extendsActivity{
02
privateTextViewmTextView;
03
privateButtonmButton;
04

05
protectedvoidonCreate(BundlesavedInstanceState){
06
super.onCreate(savedInstanceState);
07
setContentView(R.layout.main);
08
mTextView=(TextView)findViewById(R.id.TextView01);
09
mButton=(Button)findViewById(R.id.Button01);
10
mButton.setOnClickListener(newhttpListener());
11
}
12

13
//设置按钮监听器
14
classhttpListenerimplementsOnClickListener{
15
publicvoidonClick(Viewv){
16
StringhttpUrl="http://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get";
17
//HttpGet连接对象
18
HttpGethttpRequest=newHttpGet(httpUrl);
19
try{
20
//取的HttpClient对象
21
HttpClienthttpclient=newDefaultHttpClient();
22
//请求HttpClient,取的HttpResponse
23
HttpResponsehttpResponse=httpclient.execute(httpRequest);
24
//请求成功
25
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
26
//取的返回的字符串
27
StringstrResult=EntityUtils.toString(httpResponse.getEntity());
28
//这个返回值可能会在行尾出现小方格
29
//在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
30
StringstrsResult=strResult.replace("\r","");
31
mTextView.setText(strsResult);
32
}else{
33
mTextView.setText("请求错误");
34
}
35
}catch(ClientProtocolExceptione){
36
mTextView.setText(e.getMessage().toString());
37
}catch(IOExceptione){
38
mTextView.setText(e.getMessage().toString());
39
}catch(Exceptione){
40
mTextView.setText(e.getMessage().toString());
41
}
42
}
43
}
44
}

第四种方式

01
publicclassActivity4extendsActivity{
02
privateTextViewmTextView;
03
privateButtonmButton;
04

05
protectedvoidonCreate(BundlesavedInstanceState){
06
super.onCreate(savedInstanceState);
07
setContentView(R.layout.main);
08
mTextView=(TextView)findViewById(R.id.TextView01);
09
mButton=(Button)findViewById(R.id.Button01);
10
mButton.setOnClickListener(newhttpListener());
11
}
12

13
//设置按钮监听器
14
classhttpListenerimplementsOnClickListener{
15
publicvoidonClick(Viewarg0){
16
StringhttpUrl="http://192.168.0.101:8080/Test/test.jsp";
17
//创建HttpPost连接对象
18
HttpPosthttpRequest=newHttpPost(httpUrl);
19
//使用NameValuePair来保存要传递的Post参数
20
Listparams=newArrayList();
21
//添加要传递的参数
22
params.add(newBasicNameValuePair("par","HttpClient_android_Post"));
23
try{
24
//设置字符集
25
HttpEntityhttpentity=newUrlEncodedFormEntity(params,"gb2312");
26
//请求httpRequest
27
httpRequest.setEntity(httpentity);
28
//取的默认的HttpClient
29
HttpClienthttpclient=newDefaultHttpClient();
30
//取的HttpResponse
31
HttpResponsehttpResponse=httpclient.execute(httpRequest);
32
//HttpStatus.SC_OK表示连接成功
33
if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
34
//取的返回的字符串
35
StringstrResult=EntityUtils.toString(httpResponse.getEntity());
36
//这个返回值可能会在行尾出现小方格
37
//在TextView要显示的文字过滤掉回车符("\r")就可以正常显示了。
38
StringstrsResult=strResult.replace("\r","");
39
mTextView.setText(strsResult);
40
}else{
41
mTextView.setText("请求错误");
42
}
43
}catch(ClientProtocolExceptione){
44
mTextView.setText(e.getMessage().toString());
45
}catch(IOExceptione){
46
mTextView.setText(e.getMessage().toString());
47
}catch(Exceptione){
48
mTextView.setText(e.getMessage().toString());
49
}
50
}
51
}
52
}


文章出处:1、http://blog.csdn.net/jdsjlzx/article/details/68769582、http://wenku.baidu.com/link?url=1IuuCu1wvwVjpcRZQ8WN0--lDTzazCXM0CMTpZ84ROI9acdPpQiQ-yXL9JqpSjsDegGHDGbiVgkfZOR5KhNuFEeH4ZuWGha1ch9CVrCJjkW
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: