zoukankan      html  css  js  c++  java
  • android中用get和post方式向服务器提交请求

    通过get和post方式向服务器发送请求

    首先说一下get和post的区别


    get请求方式是将提交的参数拼接在url地址后面,例如http://www.baidu.com/index.jsp?num=23&jjj=888;
    但是这种形式对于那种比较隐私的参数是不适合的,而且参数的大小也是有限制的,一般是1K左右吧,对于上传文件
    就不是很适合。




    post请求方式是将参数放在消息体内将其发送到服务器,所以对大小没有限制,对于隐私的内容也比较合适。


    在android中用get方式向服务器提交请求:


    在android模拟器中访问本机中的tomcat服务器时,注意:不能写localhost,因为模拟器是一个单独的手机系统,所以要写真是的IP地址。
    否则无法访问到服务器。


    //要访问的服务器地址,下面的代码是要向服务器提交用户名和密码,提交时中文先要经过URLEncoder编码,因为模拟器默认的编码格式是utf-8
    //而tomcat内部默认的编码格式是ISO8859-1,所以先将参数进行编码,再向服务器提交。

    private String address = "http://192.168.2.101:80/server/loginServlet";
    
    
    public boolean get(String username, String password) throws Exception {
    username = URLEncoder.encode(username); // 中文数据需要经过URL编码
    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");
    //如果返回的状态码是200,则一切Ok,连接成功。
    return conn.getResponseCode() == 200;
    }
    
    
    //这种方式我平时喜欢用的方式
    
        //获得要传递的数据
        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();
         }
       

    //用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; } //下面是我喜欢的方式 //把来传递的数据封装到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();
  • 相关阅读:
    Sphinx安装流程及配合PHP使用经验
    使用HTML5视频事件示例
    Centos6.5下编译安装mysql 5.6
    AES加密
    ab参数详解 – 压力测试
    vim 常用快捷键
    telnet操作memcache
    如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
    array_map 巧替 foreach
    mac brew安装mysql
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/6098184.html
Copyright © 2011-2022 走看看