使用GET方式向服务器端提交数据

* 原理:把要提交的数据组拼到Url后面

* http协议规定数据长度不超过4kb,IE浏览器超过1kb就会丢弃掉后面的数据

* 缺点:数据不安全

* 优点:代码书写简单


示例代码:

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity {
private EditText etPwd;
private EditText etQQ;
private String pwd;
private String qq; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPwd = (EditText) findViewById(R.id.et_pwd);
etQQ = (EditText) findViewById(R.id.et_qq);
} /**
* 1. 在子线程中进行网络通讯 2. 获取服务器返回的信息 3. 用Handler去展示服务器返回的信息
*/
public void login(View v) {
pwd = etPwd.getText().toString().trim();
qq = etQQ.getText().toString().trim();
if (TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)) {
Toast.makeText(this, "亲,请输入QQ号码或者密码! :) ", 0).show();
return;
}
// 开启子线程
new Thread() {
public void run() {
requestNetWork();
};
}.start();
} /**
* 网络通信
*/
private void requestNetWork() {
//Servlet
try {
String path = "http://192.168.25.70:8080/web/LoginServlet?" + "qq="
+ URLEncoder.encode(qq) + "&pwd=" + URLEncoder.encode(pwd, "utf-8");
// 1. 创建Url
URL url = new URL(path);
// 2. 用Url打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3. 设置请求参
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
// 4. 获取响应状态码
int code = conn.getResponseCode();
if (code == 200) {
// * 2xxx 请求成 3xxx重定向 4xxx资源错误 5xxx服务器错误
// 5. 获取服务器返回的二进制输入流
InputStream is = conn.getInputStream();
// 把流转成字符串
String text = StringUtils.parseStream2String(is);
showToast(text);
} else {
showToast(code + "");
}
} catch (Exception e) {
e.printStackTrace();
showToast("服务器忙!");
}
} /**
* 在任意线程弹土司
*/
public void showToast(final String text) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, text, 0).show();
}
});
}
}

使用POST方式向服务器端提交数据

* 原理:通过form表单提交数据

* 缺点:代码书写复杂

* 优点:数据安全

示例代码:
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { private EditText etPwd;
private EditText etQQ;
private String pwd;
private String qq;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPwd = (EditText) findViewById(R.id.et_pwd);
etQQ = (EditText) findViewById(R.id.et_qq);
}
/**
* 1. 在子线程中进行网络通讯
* 2. 获取服务器返回的信息
* 3. 用Handler去展示服务器返回的信息
*/
public void login(View v) {
pwd = etPwd.getText().toString().trim();
qq = etQQ.getText().toString().trim();
if (TextUtils.isEmpty(pwd) || TextUtils.isEmpty(qq)) {
Toast.makeText(this, "亲,请输入QQ号码或者密码! :) ", 0).show();
return;
}
// 开启子线程
new Thread() {
public void run() {
requestNetWork();
};
}.start();
}
/**
* 网络通信
*/ private void requestNetWork() {
//(1) 请求的Url不一样
String path = "http://192.168.3.100:8080/web/LoginServlet";
try {
// 1. 创建Url
URL url = new URL(path);
// 2. 用Url打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 3. 设置请求参数
//(2)请求的方法不一样
conn.setRequestMethod("POST");
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
//(3)多了两个请求头
String data = "qq="+URLEncoder.encode(qq)+"&pwd="+URLEncoder.encode(pwd, "utf-8");
conn.setRequestProperty("Content-Length", String.valueOf(data.length()));
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//(4)以二进制流的方式把数据提交给服务器
//重要,声明要给服务器提交数据
conn.setDoOutput(true);
conn.getOutputStream().write(data.getBytes());
// 4. 获取响应状态码
int code = conn.getResponseCode();
if (code == 200) {
// * 2xxx 请求成 3xxx重定向 4xxx资源错误 5xxx服务器错误
// 5. 获取服务器返回的二进制输入流
InputStream is = conn.getInputStream();
// 把流转成字符串
String text = StringUtils.parseStream2String(is);
showToast(text);
} else {
showToast(code + "");
}
} catch (Exception e) {
e.printStackTrace();
showToast("服务器忙!");
}
} /*
* 在任意线程弹土司
*/
public void showToast(final String text) {
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, text, 0).show();
}
});
}
}

import java.io.ByteArrayOutputStream;
import java.io.InputStream; /**
* 操作字符串
*/
public class StringUtils { /**
* 从流中转成字符串
* @param is
* 输入流
* @return null表示失败
*/
public static String parseStream2Str(InputStream is) {
//内存输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len = -1;
byte[] buffer = new byte[1024*8];
try {
while((len = is.read(buffer)) != -1){
baos.write(buffer, 0, len);
}
return new String(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}

Get和post的请求的区别:

URL不一样

提交的数据方式不一样

Post多了二个请求头: ContentLength 和 ContentType

Post用二进制输出提交数据

HttpURLConnection提交数据的更多相关文章

  1. Android提交数据到JavaWeb服务器实现登录

    之前学习Android提交数据到php服务器没有成功,在看了两三个星期的视频之后,现在终于实现了与服务器的交互.虽然完成的不是PHP端的,但是在这个过程还是学到了不少东西的.现在我先来展示一下我的成果 ...

  2. Android 采用post方式提交数据到服务器

    接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...

  3. Android 采用get方式提交数据到服务器

    首先搭建模拟web 服务器,新建动态web项目,servlet代码如下: package com.wuyudong.web; import java.io.IOException; import ja ...

  4. Android之使用HTTP协议的Get/Post方式向服务器提交数据

    1.Get方式 方法:通过拼接url在url后添加相应的数据,如:http://172.22.35.112:8080/videonews/GetInfoServlet?title=霍比特人&t ...

  5. 使用post方式提交数据

    post提交代码 public class MainActivity extends Activity { @Override protected void onCreate(Bundle saved ...

  6. Android(java)学习笔记210:采用post请求提交数据到服务器(qq登录案例)

    1.POST请求:  数据是以流的方式写给服务器 优点:(1)比较安全 (2)长度不限制 缺点:编写代码比较麻烦   2.我们首先在电脑模拟下POST请求访问服务器的场景: 我们修改之前编写的logi ...

  7. Android(java)学习笔记209:采用get请求提交数据到服务器(qq登录案例)

    1.GET请求:    组拼url的路径,把提交的数据拼装url的后面,提交给服务器. 缺点:(1)安全性(Android下提交数据组拼隐藏在代码中,不存在安全问题)  (2)长度有限不能超过4K(h ...

  8. android 76 使用get post方式提交数据

    get方式: package com.itheima.getmethod; import java.io.InputStream; import java.net.HttpURLConnection; ...

  9. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

随机推荐

  1. Python学习记录5-面向对象

    OOP 思想 以模块化思想解决工程问题 面向过程 vs 面向对象 由面向过程转向面向对象 常用名词 OO:面向对象 ooa:分析 ood:设计 oop:编程 ooI:实现 ooa -> ood ...

  2. Linux上jdk,mysql,tomcat安装

    一:RPM(红帽软件包管理器):相当于windows的添加/卸载程序(控制面板),进行程序的安装.更新.卸载.查看: 本地程序安装:rpm -ivh 程序名 本地程序查看:rpm -qa 本地程序卸载 ...

  3. 自定义系统类加载器源码分析与forName方法底层剖析

    基于上一次[https://www.cnblogs.com/webor2006/p/9240898.html]Launcher的分析继续,上次分析到了这: 接着创建应用类加载器,其创建过程其扩展类加载 ...

  4. Python&Selenium 数据驱动【unittest+ddt+json+HTMLTestRunner】

    一.摘要 本博文将介绍Python和Selenium做自动化测试的时候,基于unittest框架,借助ddt模块使用json文件作为数据文件作为测试输入,最后借助著名的HTMLTestRunner.p ...

  5. Python&Selenium智能等待方法封装

    摘要:本篇博文用几行代码展示Python和Selenium做自动化测试时常见的显示等待和封装 # 用于实现智能等待页面元素的出现 # encoding = utf-8 ""&quo ...

  6. Shell脚本快速查看网段内ip占用情况和可用ip

    思想就是整个网段ping一遍,对于ping不通的,解析其失败的字符来判定 #!/bin/bash head_add=${} address=${head_add%.*} echo address=$a ...

  7. 下一代容器技术podman简介

    PODMAN主要由红帽发起和推动,是下一代的容器技术,包括如下三个模块:Podman,Skopeo和Buildah这三个工具都是符合OCI计划下的工具(github/containers).主要是由R ...

  8. Navicat Premium 12 安装 与 激活

    官方简体中文下载网址:https://www.navicat.com.cn/download/navicat-premium 安装的过程....(都是中文)所以略过. 开始破解....( ...... ...

  9. Mysql数据库多对多关系未建新表

    原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢? FIND_IN_SET(str,strlist) 官网:http://dev.mysql.com/doc/r ...

  10. OBDSTAR X300 PRO3详细评论

    OBDSTAR 公司的X300 PRO3钥匙主控系统具有SKP900的防盗锁钥匙编程功能,以及新功能,例如,测速计调节,EEPROM / PIC和OBDII.它的风格完全符合工业惯例,例如,它采用双边 ...