Android数据与服务器交互的GET,POST,HTTPGET,HTTPPOST的使用

 

Android有这几种方式,可以提交数据到服务器,他们是怎么使用的呢,这里我们来探讨一下。

这里的例子用的都是提交客户端的用户名及密码,同时本节用到的StreamTools.readInputStream(is);作用是把输入流转化为字符串,是一个公共类。我在前面介绍过了。http://www.cnblogs.com/fengtengfei/p/3969520.html,这里就不在重复的说明了。

第一种:GET

关键部分是:

首先我们用URL包装访问的路径,由于是get请求,在学习javaWEB的时候我们就以及知道了,路径中要把提交的参数拼装。

然后我们openConnection(),其返回的是HttpURLConnection对象,拿到这个对象我们就可以进行相关参数,及超时的设置,以及获取服务器的返回码了。

			URL url = new URL(path);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(5000);
			conn.setRequestMethod("GET");
			int code = conn.getResponseCode();

 

example:

 1 public static String loginByGet(String username,String password) {
 2         //提交数据到发服务器
 3         String path = null;
 4         try {
 5             path = "http://192.168.254.100:8080/web/LoginServlet?username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
 6         } catch (UnsupportedEncodingException e1) {
 7             // TODO Auto-generated catch block
 8             e1.printStackTrace();
 9         }
10         
11         try {
12             URL url = new URL(path);
13             
14             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
15             conn.setConnectTimeout(5000);
16             conn.setRequestMethod("GET");
17             
18             
19             int code = conn.getResponseCode();
20             if(code==200){
21                 //请求成功
22                 InputStream is = conn.getInputStream();
23                 String result = StreamTools.readInputStream(is);
24                 
25                 return result;
26             }else{
27                 return null;
28             }
29             
30             
31         } catch (Exception e) {
32             // TODO Auto-generated catch block
33             e.printStackTrace();
34             return null;
35         }
36         
37     }

 

第二种:Post

在网页的get与post的请求的对比中我们知道post比get多了几个参数,所以这里我们也是要对相关参数进行设置的,

首先我们要设置的是Content-type与Cotent-Length,

	           String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
			conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");
			conn.setRequestProperty("Content-Length:", data.length()+"");

 其次,post的方式,实际上是浏览器把数据写给服务器。所以我们要设置相关参数,让服务器允许我们有写的权限,

	          conn.setDoOutput(true);
			OutputStream os = conn.getOutputStream();
			os.write(data.getBytes());

 example

 1 public static String loginByPost(String username,String password){
 2         //POST提交数据到发服务器
 3         String path = "http://192.168.254.100:8080/web/LoginServlet";
 4         
 5         try {
 6             URL url = new URL(path);
 7             
 8             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 9             conn.setConnectTimeout(5000);
10             conn.setRequestMethod("POST");
11             //准备数据,计算其长度
12             String data = "username="+URLEncoder.encode(username,"utf-8")+"&password="+password;
13             conn.setRequestProperty("Content-Type:", "application/x-www-form-urlencoded");
14             conn.setRequestProperty("Content-Length:", data.length()+"");
16             //post的方式,实际上是浏览器把数据写给服务器。
17             //允许写数据
18             conn.setDoOutput(true);
19             OutputStream os = conn.getOutputStream();
20             os.write(data.getBytes());
21             System.out.println("2");
22             
23             int code = conn.getResponseCode();25             if(code==200){
26                 //请求成功
27                 InputStream is = conn.getInputStream();
28                 String result = StreamTools.readInputStream(is);
29                 
30                 return result;
31             }else{
32                 return null;
33             }
34             
35             
36         } catch (Exception e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39             return null;
40         }
41         
42     }

 

第三种:httpclientget

使用步骤是,我们首先要实例化一个HttpClient的对象,同时也要实例一个HttpGet的对象,让HttpClient的对象去execute(HttpGet的对象),这时我们可以得到HttpResponse的对象,二者就是服务器的返回的对象,所以区别就在这里了。

这里的返回码是这样获得的response.getStatusLine().getStatusCode();使用中要注意。

 

example:

public static String loginByHttpClientGet(String username,String password){
        try {
            HttpClient client = new DefaultHttpClient();
            String path = "http://192.168.254.100:8080/web/LoginServlet?username="
            +URLEncoder.encode(username)+"&password="+URLEncoder.encode(password);
            HttpGet httpGet = new HttpGet(path);
            //执行操作。敲回车
            HttpResponse response = client.execute(httpGet);
            int code = response.getStatusLine().getStatusCode();
            if(code==200){
                //请求成功
                InputStream is = response.getEntity().getContent();
                String result = StreamTools.readInputStream(is);
                
                return result;
            }else{
                return null;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

    }

 

第四种:httpclientpost

采用HttpClientPost的方式与HttpClientGet的方式的区别是HttpPost要指定提交的数据实体,而这里的实现就像是map,所以对于参数较多的时候,这种方式是最为便捷的。

	                List<NameValuePair> parameters = new ArrayList<NameValuePair>();
			parameters.add(new BasicNameValuePair("username", username));
			parameters.add(new BasicNameValuePair("password", password));            

 example:

public static String loginByHttpClientPost(String username,String password){
        try {
            HttpClient client = new DefaultHttpClient();
            String path = "http://192.168.254.100:8080/web/LoginServlet";
            HttpPost post = new HttpPost();
            //指定要提交的数据实体
            List<NameValuePair> parameters = new ArrayList<NameValuePair>();
            parameters.add(new BasicNameValuePair("username", username));
            parameters.add(new BasicNameValuePair("password", password));
            post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
            
            HttpResponse response = client.execute(post);
            
            int code = response.getStatusLine().getStatusCode();
            if(code==200){
                //请求成功
                InputStream is = response.getEntity().getContent();
                String result = StreamTools.readInputStream(is);
                
                return result;
            }else{
                return null;
            }
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

 

作者:Darren

微博:@IT_攻城师

出处:http://www.cnblogs.com/fengtengfei/

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。