zoukankan      html  css  js  c++  java
  • Android请求服务器的两种方式--post, get的区别

    android中用get和post方式向服务器提交请求_疯狂之桥_新浪博客
    http://blog.sina.com.cn/s/blog_a46817ff01017yxt.html

    Android提交数据到服务器的两种方式四种方法 - 从不曾离开的只有自由和梦想! - ITeye技术网站
    http://keeponmoving.iteye.com/blog/1528472

    android端向服务器提交请求的几种方式 - Android移动开发技术文章_手机开发 - 红黑联盟
    http://www.2cto.com/kf/201309/242510.html

    // android中向服务器提交请求的两种方式和四种方法
    
    
    
    private String addr = "http://192.168.2.101:80/serlet/loginServlet";
    
    /* 1. 在android中用get方式向服务器提交请求 */
    
    public boolean get(String username, String password) throws Exception {
        username = URLEncoder.encode(username);
        password = URLEncoder.encode(password);
        String params = "Username = " + username + "&password = " + password;
        //将参数拼接在URl地址后面
        URL url = new URL(address + "?" + params);
        //通过url地址打开连接
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置超时时间
        conn.setConnectTimeout(3000);
        //设置请求方式
        conn.setRequestMethod("GET");
        return conn.getResponseCode() == 200;
    }
    
    
    /* 2. HttpGet方式向服务器提交请求 --HttpClient */
    
    //获得要传递的数据
        String username = et1.getText().toString();
        String password = et2.getText().toString();
        
        // 创建HttpGet对象
        HttpGet request = new HttpGet(url +"name="+username+"&password="+password);
        // 使用execute方法发送HTTP GET请求,并返回HttpResponse对象
        // DefaultHttpClient为Http客户端管理类,负责发送请
        HttpResponse response = httpClient.execute(request);
        // 判断请求响应状态码,状态码为200表示服务端成功响应了客户端的请求
        if (response.getStatusLine().getStatusCode() == 200) {
             // 使用getEntity方法获得返回结果
             String data = EntityUtils.toString(response.getEntity(),"gbk");
             //获得Message对象
             Message msg = handler.obtainMessage(1);
            //创建Bundle对象
             Bundle bundle = new Bundle();
             //用mes传递数据
             msg.setData(bundle);
            //开启Message对象
             msg.sendToTarget();
        }
       
    /* 3. post 方式向服务器提交请求 */
    public boolean post(String username, String password) throws Exception {
        username = URLEncoder.encode(username); // 中文数据需要经过URL编码
        password = URLEncoder.encode(password);
        String params = "username=" + username + "&password=" + password;
        byte[] data = params.getBytes();
    
        URL url = new URL(address);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(3000);
        //这是请求方式为POST
        conn.setRequestMethod("POST");
        //设置post请求必要的请求头
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 请求头, 必须设置
        conn.setRequestProperty("Content-Length", data.length + ""); // 注意是字节长度, 不是字符长度
    
        conn.setDoOutput(true); // 准备写出
        conn.getOutputStream().write(data); // 写出数据
    
        return conn.getResponseCode() == 200;
    }
    
    
    /* 4. HttpPost方式向服务器提交请求 --HttpClient */
    //把来传递的数据封装到user对象中
        User user = new User();
        user.setUserName(et1.getText().toString());
        user.setUserPass(et2.getText().toString());
        
        //创建Post对象
        HttpPost request = new HttpPost("http://10.0.2.2:8080/system/Servlet");
        
        // 将需要传递的参数封装到List<NameValuePair>类型的对象中
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("username", user.getUserName()));
        params.add(new BasicNameValuePair("password", user.getUserPass()));
        
        // 将封装参数的对象存入request中,并设置编码方式
        request.setEntity(new UrlEncodedFormEntity(params,
          HTTP.UTF_8));
    
        // DefaultHttpClient为Http客户端管理类,负责发送请求和接受响应
        HttpResponse response = defaultHttpClient.execute(request);
        
        // 判断请求响应状态码,状态码为200表示服务端成功响应了客户端的请求
        if (response.getStatusLine().getStatusCode() == 200) {
             // 使用getEntity方法获得返回结果
             String data = EntityUtils.toString(response.getEntity(),"gdk");
             //创建bundle对象
             Bundle bundle = new Bundle();
             //用bundle对象来封装data数据
             bundle.putString("data", data);
             //创建Message对象
             Message mes = handler.obtainMessage(1);
             //存储bundle数据
             mes.setData(bundle);
    
             mes.sendToTarget();
        }

      1 /**
      2  * @author Dylan
      3  * 本类封装了Android中向web服务器提交数据的两种方式四种方法
      4  */
      5 public class SubmitDataByHttpClientAndOrdinaryWay {
      6 
      7     /**
      8      * 使用get请求以普通方式提交数据
      9      * @param map 传递进来的数据,以map的形式进行了封装
     10      * @param path 要求服务器servlet的地址
     11      * @return 返回的boolean类型的参数
     12      * @throws Exception
     13      */
     14     public Boolean submitDataByDoGet(Map<String, String> map, String path) throws Exception {
     15         // 拼凑出请求地址
     16         StringBuilder sb = new StringBuilder(path);
     17         sb.append("?");
     18         for (Map.Entry<String, String> entry : map.entrySet()) {
     19             sb.append(entry.getKey()).append("=").append(entry.getValue());
     20             sb.append("&");
     21         }
     22         sb.deleteCharAt(sb.length() - 1);
     23         String str = sb.toString();
     24         System.out.println(str);
     25         URL Url = new URL(str);
     26         HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
     27         HttpConn.setRequestMethod("GET");
     28         HttpConn.setReadTimeout(5000);
     29         // GET方式的请求不用设置什么DoOutPut()之类的吗?
     30         if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
     31             return true;
     32         }
     33         return false;
     34     }
     35 
     36     /**
     37      * 普通方式的DoPost请求提交数据
     38      * @param map 传递进来的数据,以map的形式进行了封装
     39      * @param path 要求服务器servlet的地址
     40      * @return 返回的boolean类型的参数
     41      * @throws Exception
     42      */
     43     public Boolean submitDataByDoPost(Map<String, String> map, String path) throws Exception {
     44         // 注意Post地址中是不带参数的,所以newURL的时候要注意不能加上后面的参数
     45         URL Url = new URL(path);
     46         // Post方式提交的时候参数和URL是分开提交的,参数形式是这样子的:name=y&age=6
     47         StringBuilder sb = new StringBuilder();
     48         // sb.append("?");
     49         for (Map.Entry<String, String> entry : map.entrySet()) {
     50             sb.append(entry.getKey()).append("=").append(entry.getValue());
     51             sb.append("&");
     52         }
     53         sb.deleteCharAt(sb.length() - 1);
     54         String str = sb.toString();
     55 
     56         HttpURLConnection HttpConn = (HttpURLConnection) Url.openConnection();
     57         HttpConn.setRequestMethod("POST");
     58         HttpConn.setReadTimeout(5000);
     59         HttpConn.setDoOutput(true);
     60         HttpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
     61         HttpConn.setRequestProperty("Content-Length", String.valueOf(str.getBytes().length));
     62         OutputStream os = HttpConn.getOutputStream();
     63         os.write(str.getBytes());
     64         if (HttpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
     65             return true;
     66         }
     67         return false;
     68     }
     69 
     70     /**
     71      * 以HttpClient的DoGet方式向服务器发送请数据
     72      * @param map 传递进来的数据,以map的形式进行了封装
     73      * @param path 要求服务器servlet的地址
     74      * @return 返回的boolean类型的参数
     75      * @throws Exception
     76      */
     77     public Boolean submitDataByHttpClientDoGet(Map<String, String> map, String path) throws Exception {
     78         HttpClient hc = new DefaultHttpClient();
     79         // 请求路径
     80         StringBuilder sb = new StringBuilder(path);
     81         sb.append("?");
     82         for (Map.Entry<String, String> entry : map.entrySet()) {
     83             sb.append(entry.getKey()).append("=").append(entry.getValue());
     84             sb.append("&");
     85         }
     86         sb.deleteCharAt(sb.length() - 1);
     87         String str = sb.toString();
     88         System.out.println(str);
     89         HttpGet request = new HttpGet(sb.toString());
     90 
     91         HttpResponse response = hc.execute(request);
     92         if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
     93             return true;
     94         }
     95         return false;
     96     }
     97     
     98     /**
     99      * 以HttpClient的DoPost方式提交数据到服务器
    100      * @param map 传递进来的数据,以map的形式进行了封装
    101      * @param path 要求服务器servlet的地址
    102      * @return 返回的boolean类型的参数
    103      * @throws Exception
    104      */
    105     public Boolean submintDataByHttpClientDoPost(Map<String, String> map, String path) throws Exception {
    106         // 1. 获得一个相当于浏览器对象HttpClient,使用这个接口的实现类来创建对象,DefaultHttpClient
    107         HttpClient hc = new DefaultHttpClient();
    108         // DoPost方式请求的时候设置请求,关键是路径
    109         HttpPost request = new HttpPost(path);
    110         // 2. 为请求设置请求参数,也即是将要上传到web服务器上的参数
    111         List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    112         for (Map.Entry<String, String> entry : map.entrySet()) {
    113             NameValuePair nameValuePairs = new BasicNameValuePair(entry.getKey(), entry.getValue());
    114             parameters.add(nameValuePairs);
    115         }
    116         // 请求实体HttpEntity也是一个接口,我们用它的实现类UrlEncodedFormEntity来创建对象,注意后面一个String类型的参数是用来指定编码的
    117         HttpEntity entity = new UrlEncodedFormEntity(parameters, "UTF-8");
    118         request.setEntity(entity);
    119         // 3. 执行请求
    120         HttpResponse response = hc.execute(request);
    121         // 4. 通过返回码来判断请求成功与否
    122         if (response.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK) {
    123             return true;
    124         }
    125         return false;
    126     }
    127 }
  • 相关阅读:
    Python学习之==>第三方模块的安装、模块导入
    Python学习之==>json处理
    Python学习之==>内置函数、列表生成式、三元表达式
    Python学习之==>函数
    Python学习之==>文件操作
    Python学习之==>集合
    函数,递归,内置函数
    python流程控制
    python文件处理
    Python基础之数据类型
  • 原文地址:https://www.cnblogs.com/bluestorm/p/5763593.html
Copyright © 2011-2022 走看看