android基础学习之http协议网络请求基本实例

转载地址:http://blog.csdn.net/liuhe688/article/details/6425225

在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作。Android SDK附带了Apache的HttpClient API。Apache HttpClient是一个完善的HTTP客户端,它提供了对HTTP协议的全面支持,可以使用HTTP GET和POST进行访问。下面我们就结合实例,介绍一下HttpClient的使用方法。

  1. package com.scot.http.test;  
  2.   
  3. import java.io.ByteArrayOutputStream;  
  4. import java.io.InputStream;  
  5. import java.util.ArrayList;  
  6. import java.util.List;  
  7.   
  8. import junit.framework.Assert;  
  9.   
  10. import org.apache.http.HttpEntity;  
  11. import org.apache.http.HttpResponse;  
  12. import org.apache.http.HttpStatus;  
  13. import org.apache.http.NameValuePair;  
  14. import org.apache.http.client.HttpClient;  
  15. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  16. import org.apache.http.client.methods.HttpGet;  
  17. import org.apache.http.client.methods.HttpPost;  
  18. import org.apache.http.entity.mime.MultipartEntity;  
  19. import org.apache.http.entity.mime.content.InputStreamBody;  
  20. import org.apache.http.entity.mime.content.StringBody;  
  21. import org.apache.http.impl.client.DefaultHttpClient;  
  22. import org.apache.http.message.BasicNameValuePair;  
  23.   
  24. import android.test.AndroidTestCase;  
  25.   
  26. public class HttpTest extends AndroidTestCase {  
  27.       
  28.     private static final String PATH = "http://192.168.1.57:8080/web";  
  29.       
  30.     public void testGet() throws Exception {  
  31.         HttpClient client = new DefaultHttpClient();  
  32.         HttpGet get = new HttpGet(PATH + "/TestServlet?id=1001&name=john&age=60");  
  33.         HttpResponse response = client.execute(get);  
  34.         if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  35.             InputStream is = response.getEntity().getContent();  
  36.             String result = inStream2String(is);  
  37.             Assert.assertEquals(result, "GET_SUCCESS");  
  38.         }  
  39.     }  
  40.       
  41.     public void testPost() throws Exception {  
  42.         HttpClient client = new DefaultHttpClient();  
  43.         HttpPost post = new HttpPost(PATH + "/TestServlet");  
  44.         List<NameValuePair> params = new ArrayList<NameValuePair>();  
  45.         params.add(new BasicNameValuePair("id""1001"));  
  46.         params.add(new BasicNameValuePair("name""john"));  
  47.         params.add(new BasicNameValuePair("age""60"));  
  48.         HttpEntity formEntity = new UrlEncodedFormEntity(params);  
  49.         post.setEntity(formEntity);  
  50.         HttpResponse response = client.execute(post);  
  51.         if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  52.             InputStream is = response.getEntity().getContent();  
  53.             String result = inStream2String(is);  
  54.             Assert.assertEquals(result, "POST_SUCCESS");  
  55.         }  
  56.     }  
  57.       
  58.     public void testUpload() throws Exception {  
  59.         InputStream is = getContext().getAssets().open("books.xml");  
  60.         HttpClient client = new DefaultHttpClient();  
  61.         HttpPost post = new HttpPost(PATH + "/UploadServlet");  
  62.         InputStreamBody isb = new InputStreamBody(is, "books.xml");  
  63.         MultipartEntity multipartEntity = new MultipartEntity();  
  64.         multipartEntity.addPart("file", isb);  
  65.         multipartEntity.addPart("desc"new StringBody("this is description."));  
  66.         post.setEntity(multipartEntity);  
  67.         HttpResponse response = client.execute(post);  
  68.         if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {  
  69.             is = response.getEntity().getContent();  
  70.             String result = inStream2String(is);  
  71.             Assert.assertEquals(result, "UPLOAD_SUCCESS");  
  72.         }  
  73.     }  
  74.       
  75.     //将输入流转换成字符串  
  76.     private String inStream2String(InputStream is) throws Exception {  
  77.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  78.         byte[] buf = new byte[1024];  
  79.         int len = -1;  
  80.         while ((len = is.read(buf)) != -1) {  
  81.             baos.write(buf, 0, len);  
  82.         }  
  83.         return new String(baos.toByteArray());  
  84.     }  


以下是android自带的工具:

java.net包中的HttpURLConnection类

Get方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Get方式请求
public static void requestByGet() throws Exception {
     String path = "https://reg.163.com/logins.jsp?id=helloworld&pwd=android" ;
     // 新建一个URL对象
     URL url = new URL(path);
     // 打开一个HttpURLConnection连接
     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
     // 设置连接超时时间
     urlConn.setConnectTimeout( 5 * 1000 );
     // 开始连接
     urlConn.connect();
     // 判断请求是否成功
     if (urlConn.getResponseCode() == HTTP_200) {
         // 获取返回的数据
         byte [] data = readStream(urlConn.getInputStream());
         Log.i(TAG_GET, "Get方式请求成功,返回数据如下:" );
         Log.i(TAG_GET, new String(data, "UTF-8" ));
     } else {
         Log.i(TAG_GET, "Get方式请求失败" );
     }
     // 关闭连接
     urlConn.disconnect();
}

Post方式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Post方式请求
public static void requestByPost() throws Throwable {
     String path = "https://reg.163.com/logins.jsp" ;
     // 请求的参数转换为byte数组
     String params = "id=" + URLEncoder.encode( "helloworld" , "UTF-8" )
             + "&pwd=" + URLEncoder.encode( "android" , "UTF-8" );
     byte [] postData = params.getBytes();
     // 新建一个URL对象
     URL url = new URL(path);
     // 打开一个HttpURLConnection连接
     HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
     // 设置连接超时时间
     urlConn.setConnectTimeout( 5 * 1000 );
     // Post请求必须设置允许输出
     urlConn.setDoOutput( true );
     // Post请求不能使用缓存
     urlConn.setUseCaches( false );
     // 设置为Post请求
     urlConn.setRequestMethod( "POST" );
     urlConn.setInstanceFollowRedirects( true );
     // 配置请求Content-Type
     urlConn.setRequestProperty( "Content-Type" ,
             "application/x-www-form-urlencode" );
     // 开始连接
     urlConn.connect();
     // 发送请求参数
     DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
     dos.write(postData);
     dos.flush();
     dos.close();
     // 判断请求是否成功
     if (urlConn.getResponseCode() == HTTP_200) {
         // 获取返回的数据
         byte [] data = readStream(urlConn.getInputStream());
         Log.i(TAG_POST, "Post请求方式成功,返回数据如下:" );
         Log.i(TAG_POST, new String(data, "UTF-8" ));
     } else {
         Log.i(TAG_POST, "Post方式请求失败" );
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值