HTTP POST和GET的提交方式
来源:互联网 发布:网络对战游戏排行 编辑:程序博客网 时间:2024/05/16 11:48
向服务器提交数据有两种方式,post和get。两者的区别主要有三点,安全性、长度限制、数据结构。其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。两种都是较为重要的数据提交方式。现简单介绍一下三种post和get的提交方式。无论是哪种方法实现post和get,get 的访问路径都要携带数据,而post提交是把数据放在方法体中。
普通方法实现get/post提交:
严格遵照Http协议进行数据传输。在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服务器提交数据。为了更加直观的观察数据,可以在程序屏幕上显示服务器反馈信息。又由于子线程无法更改UI界面,因此需要引入Hnndler代理器。实现get/post提交基本步骤就是,获取URL路径,根据路径得到Http连接,用HttpURLConnection对象设置相关的http配置信息、提交方式以及获取反馈码。当响应码为200时表示提交成功,可以通过HttpURLConnection以流的形式获取反馈信息。
普通GET提交方式:
public
void
load(View view){
final
String qq = et_qq.getText().toString().trim();
final
String pwd = et_pwd.getText().toString().trim();
if
(TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) {
Toast.makeText(MainActivity.
this
,
"qq号或密码为空"
,
0
).show();
return
;
}
final
String path =
"http://192.168.1.114:8080/qqload/qqload?qq="
+ qq
+
"&pwd="
+ pwd;
new
Thread() {
public
void
run() {
try
{
URL url =
new
URL(path);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setRequestMethod(
"GET"
);
conn.setReadTimeout(
5000
);
int
code = conn.getResponseCode();
if
(code ==
200
) {
InputStream is = conn.getInputStream();
String result = StreamTools.ReadStream(is);
Message msg = Message.obtain();
msg.what = SUCCESS;
msg.obj = result;
handler.sendMessage(msg);
}
else
{
Message msg = Message.obtain();
msg.what = ERROR1;
handler.sendMessage(msg);
}
}
catch
(Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Message msg = Message.obtain();
msg.what = ERROR2;
handler.sendMessage(msg);
}
}
}.start();
}
普通POST提交方式:
public void load(View view){ final String qq = et_qq.getText().toString().trim(); final String pwd = et_pwd.getText().toString().trim(); if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) { Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show(); return; } final String path = "http://192.168.1.114:8080/qqload/qqload"; new Thread() { public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("POST"); conn.setReadTimeout(5000); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); String data = "qq="+URLEncoder.encode(qq,"utf-8")+"&pwd=" + URLEncoder.encode(pwd,"utf-8"); conn.setRequestProperty("Content-Length",String.valueOf(data.length())); conn.setDoOutput(true); conn.getOutputStream().write(data.getBytes()); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); String result = StreamTools.ReadStream(is); Message msg = Message.obtain(); msg.what = SUCCESS; msg.obj = result; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = ERROR1; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR2; handler.sendMessage(msg); } } }.start(); }
用httpclien实现get/post提交的只需要一下几个步骤:
1. 创建HttpClient对象,实现打开浏览器的功能
HttpClient client = new DefaultHttpClient();
2. 输入地址或者数据 ,用到HttpGet()或HttpPost(),传入要访问的路径,得到HttpGet或HttpPost对象。
HttpGet httpGet = new HttpGet(path);
3. 把获得的HttpGet或HttpPost对象发送到服务器,实现敲回车的功能,得到HttpResponse对象。
HttpResponse response = client.execute(httpGet);
4. 得到HttpResponse对象获取状态行中的状态码,判断状态码状态码。
int code = response.getStatusLine().getStatusCode();
5. 同样用HttpResponse对象获取相应内容,存入流对象。最后将得到的流对象转为字符串进行显示。
InputStream is = response.getEntity().getContent();
其中要注意的一点是用post请求时要传递值所以要多出一个步骤。具体而言,先创建一个list集合,集合的泛型用NameValuePair表示,类似于键值对的形式存储要传递的数据。接着向集合中添加要提交数据。最后用HttpPost对象把集合存入请求体中。
用HttpClient实现GET提交:
public void load(View view){ final String qq = et_qq.getText().toString().trim(); final String pwd = et_pwd.getText().toString().trim(); if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) { Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show(); return; } final String path = "http://192.168.1.114:8080/qqload/qqload?qq=" + qq + "&pwd=" + pwd; new Thread() { public void run() { try { HttpClient client = new DefaultHttpClient(); 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.ReadStream(is); Message msg = Message.obtain(); msg.what = SUCCESS; msg.obj = result; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = ERROR1; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR2; handler.sendMessage(msg); } } }.start(); }
用HttpClient实现POST提交:
public void load(View view){ final String qq = et_qq.getText().toString().trim(); final String pwd = et_pwd.getText().toString().trim(); if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(pwd)) { Toast.makeText(MainActivity.this, "qq号或密码为空", 0).show(); return; } final String path = "http://192.168.1.114:8080/qqload/qqload"; new Thread() { public void run() { try { HttpClient client = new DefaultHttpClient(); HttpPost httppost = new HttpPost(path); List<NameValuePair> parameter = new ArrayList(); parameter.add(new BasicNameValuePair("qq", qq)); parameter.add(new BasicNameValuePair("pwd", pwd)); httppost.setEntity(new UrlEncodedFormEntity(parameter,"utf-8")); HttpResponse response = client.execute(httppost); int code = response.getStatusLine().getStatusCode(); if (code == 200) { InputStream is = response.getEntity().getContent(); String result = StreamTools.ReadStream(is); Message msg = Message.obtain(); msg.what = SUCCESS; msg.obj = result; handler.sendMessage(msg); } else { Message msg = Message.obtain(); msg.what = ERROR1; handler.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Message msg = Message.obtain(); msg.what = ERROR2; handler.sendMessage(msg); } } }.start(); }
通过以上任何一种方式可以实现的功能是,从安卓手机端提交数据到服务器端,服务器端进行判断,并返回相应的结果。三种方式各有利弊,实现效果相同,在实际的使用过程中可以根据本身的需要进行选择。
- HTTP POST和GET的提交方式
- 表单的提交方式POST和GET
- Get和Post的提交方式
- 表单的提交方式:get和post
- get提交方式和post提交方式的区别
- http-使用get和post方式提交数据
- http使用post和get方式提交数据
- HTTP get和post方式的区别
- Http的Get和Post方式详解
- http的post和get请求方式
- HTTP的两种提交请求的方式get和post
- Http的Get和Post提交方式的自定义工具类
- 浅谈post提交和get提交方式的区别
- Http post提交和get提交
- 网页提交方式post和get的区别和联系
- GET和POST提交数据方式的区别和使用
- GET和POST提交数据方式的区别和使用
- http提交请求中get和post的区别
- Linux下安装Zookeeper
- Ruby初探
- 程序算法编程:求两个数组的交
- forward和redirect的区别
- 20个常用的正则表达式
- HTTP POST和GET的提交方式
- codevs 3301 Square words 题解报告
- 解决kafka Unrecognized VM option 'UseCompressedOops'问题
- 碎碎念
- 三大移动运营商手机号段大全 附手机号正则表达式
- 一个显示等级进度的控件,可以自定义等级值、颜色、游标等。
- codeforces 475D CGCDSSQ (st表+数论)
- MyBatis
- jvm学习笔记