Post方式请求提交数据到服务器

使用post方式提交数据到服务器

核心代码:

    // 提交数据
    private void submit(View v) {
    number = et_number.getText().toString().trim();
    password = et_password.getText().toString().trim();
    path = getResources().getString(R.string.ip);

    if(TextUtils.isEmpty(number)||TextUtils.isEmpty(password)){
        Toast.makeText(MainActivity.this, "有输入项未填", 0).show();
        return;
    }
    // 开线程去联网
    new Thread() {
        public void run() {
            try {

                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                // 设置必要的参数
                conn.setRequestMethod("POST");
                conn.setConnectTimeout(5000);
                // 用post连接还要设置几个属性
                // application/x-www-form-urlencoded
                conn.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded");
                // 设置长度
                // 输入的中文名字要先转码,不然会出现乱码问题
                number = URLEncoder.encode(number, "UTF-8");
                String prams = "number=" + number + "&password=" + password;
                conn.setRequestProperty("Content-Length", prams.length()
                        + "");

                // 参数设置完成,现在就可以把数据上传服务器了
                // 告诉服务器开始上传
                conn.setDoOutput(true);
                conn.getOutputStream().write(prams.getBytes());

                // 获得返回码
                int code = conn.getResponseCode();
                if (code == 200) {
                    // 获得从服务器返回的数据流
                    InputStream in = conn.getInputStream();
                    String values = StreamUtils.streamTools(in);
                    // 发送消息到主线程去更新UI
                    Message msg = Message.obtain();
                    msg.what = SUCCESS;
                    msg.obj = values;
                    handler.sendMessage(msg);

                }
            } catch (Exception e) {
                Message msg = Message.obtain();
                msg.what = ERROR;
                handler.sendMessage(msg);
            }
        };

    }.start();

}

注意事项

  1. 使用post方式给服务器提交数据的时候与get方式有一点点不同,
    1. 使用post方式不用组拼url,因为post有请求体,它提交的数据放在请求体中提交
    2. 在请求体中提交数据,要设置几个请求头,且这几个请求头有先后之分,要注意一下
  2. 开始上传数据的请求头,以及上传数据的代码,要写在获得返回码的前面,不能写到获得返回码的代码 后面去

用到的重要api

  1. conn.setRequestProperty(“Content-Type”,”application/x-www-form-urlencoded”);
    //设置请求上传的数据类型
  2. conn.setRequestProperty(“Content-Length”, prams.length()+ “”);
    //设置请求上传数据的长度
  3. conn.setDoOutput(true);
    // 告诉服务器开始上传数据了
  4. conn.getOutputStream().write(prams.getBytes());
    //把数据以流的方式写给服务器

你可能感兴趣的:(网络访问)