2024年2月27日发(作者:)

三种POST和GET的提交方式

三种POST和GET的提交方式

向服务器提交数据有两种方式,post和get。两者的区别主要有三点,安全性、长度限制、数据结构。其中get请求安全性相比较而言较差,数据长度受浏览器地址栏限制,没有方法体。两种都是较为重要的数据提交方式。现简单介绍一下三种post和get的提交方式。无论是哪种方法实现post和get,get的访问路径都要携带数据,而post提交是把数据放在方法体中。

普通方法实现get/post提交:

严格遵照Http协议进行数据传输。在安卓开发环境下,由于主线程不能进行网络访问,因此需要在开启一个子线程向服务器提交数据。为了更加直观的观察数据,可以在程序屏幕上显示服务器反馈信息。又由于子线程无法更改UI界面,因此需要引入Hnndler代理器。实现get/post提交基本步骤就是,获取URL路径,根据路径得到Http连接,用HttpURLConnection对象设置相关的http配置信息、提交方式以及获取反馈码。当响应码为200时表示提交成功,可以通过HttpURLConnection以流的形式获取反馈信息。

普通GRT提交方式:

publicvoidload(Viewview){

finalStringqq=et_t().toString().trim();

finalStringpwd=et_t().toString().trim();

if(y(qq)||y(pwd)){

xt(,"qq号或密码为空",0).show();

return;

}

finalStringpath="192.168.1.114:8080/qqload/qqload?qq="+qq

+"&pwd="+pwd;

newThread(){

publicvoidrun(){

try{

URLurl=newURL(path);

HttpURLConnectionconn=(HttpURLConnection)url

.openConnection();

uestMethod("GET");

dTimeout(5000);

intcode=ponseCode();

if(code==200){

InputStreamis=utStream();

Stringresult=ream(is);

Messagemsg=();

=SUCCESS;

=result;

ssage(msg);

}else{

Messagemsg=();

=ERROR1;

ssage(msg);

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

tackTrace();

Messagemsg=();

=ERROR2;

ssage(msg);

}

}

}.start();

}

普通POST提交方式:

复制代码

publicvoidload(Viewview){

finalStringqq=et_t().toString().trim();

finalStringpwd=et_t().toString().trim();

if(y(qq)||y(pwd)){

xt(,"qq号或密码为空",0).show();

return;

}

finalStringpath="192.168.1.114:8080/qqload/qqload";

newThread(){

publicvoidrun(){

try{

URLurl=newURL(path);

HttpURLConnectionconn=(HttpURLConnection)url

.openConnection();

uestMethod("POST");

dTimeout(5000);

uestProperty("Content-Type","application/x-www-form-urlencoded");

Stringdata="qq="+(qq,"utf-8")+"&pwd="+(pwd,"utf-8");

uestProperty("Content-Length",f(()));

utput(true);

putStream().write(es());

intcode=ponseCode();

if(code==200){

InputStreamis=utStream();

Stringresult=ream(is);

Messagemsg=();

=SUCCESS;

=result;

ssage(msg);

}else{

Messagemsg=();

=ERROR1;

ssage(msg);

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

tackTrace();

Messagemsg=();

=ERROR2;

ssage(msg);

}

}

}.start();

}

复制代码

用httpclien实现get/post提交的只需要一下几个步骤:

1.创建HttpClient对象,实现打开浏览器的功能

HttpClientclient=newDefaultHttpClient();

2.输入地址或者数据,用到HttpGet()或HttpPost(),传入要访问的路径,得到HttpGet或HttpPost对象。

HttpGethttpGet=newHttpGet(path);

3.把获得的HttpGet或HttpPost对象发送到服务器,实现敲回车的功能,得到HttpResponse对象。

HttpResponseresponse=e(httpGet);

4.得到HttpResponse对象获取状态行中的状态码,判断状态码状态码。

intcode=tusLine().getStatusCode();

5.同样用HttpResponse对象获取相应内容,存入流对象。最后将得到的流对象转为字符串进行显示。

InputStreamis=ity().getContent();

其中要注意的一点是用post请求时要传递值所以要多出一个步骤。具体而言,先创建一个list集合,集合的泛型用NameValuePair表示,

类似于键值对的形式存储要传递的数据。接着向集合中添加要提交数据。最后用HttpPost对象把集合存入请求体中。

用HttpClient实现GET提交:

复制代码

publicvoidload(Viewview){

finalStringqq=et_t().toString().trim();

finalStringpwd=et_t().toString().trim();

if(y(qq)||y(pwd)){

xt(,"qq号或密码为空",0).show();

return;

}

finalStringpath="192.168.1.114:8080/qqload/qqload?qq="+qq

+"&pwd="+pwd;

newThread(){

publicvoidrun(){

try{

HttpClientclient=newDefaultHttpClient();

HttpGethttpget=(path);

HttpResponseresponse=e(httpget);

intcode=tusLine().getStatusCode();

if(code==200){

InputStreamis=ity().getContent();

Stringresult=ream(is);

Messagemsg=();

=SUCCESS;

=result;

ssage(msg);

}else{

Messagemsg=();

=ERROR1;

ssage(msg);

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

tackTrace();

Messagemsg=();

=ERROR2;

ssage(msg);

}

}

}.start();

}

复制代码

用HttpClient实现POST提交:

复制代码

publicvoidload(Viewview){

finalStringqq=et_t().toString().trim();

finalStringpwd=et_t().toString().trim();

if(y(qq)||y(pwd)){

xt(,"qq号或密码为空",0).show();

return;

}

finalStringpath="192.168.1.114:8080/qqload/qqload";

newThread(){

publicvoidrun(){

try{

HttpClientclient=newDefaultHttpClient();

HttpPosthttppost=newHttpPost(path);

Listparameter=newArrayList();

(newBasicNameValuePair("qq",qq));

(newBasicNameValuePair("pwd",pwd));

ity(newUrlEncodedFormEntity(parameter,"utf-8"));

HttpResponseresponse=e(httppost);

intcode=tusLine().getStatusCode();

if(code==200){

InputStreamis=ity().getContent();

Stringresult=ream(is);

Messagemsg=();

=SUCCESS;

=result;

ssage(msg);

}else{

Messagemsg=();

=ERROR1;

ssage(msg);

}

}catch(Exceptione){

//TODOAuto-generatedcatchblock

tackTrace();

Messagemsg=();

=ERROR2;

ssage(msg);

}

}

}.start();

}

复制代码

使用开源框架实现get/post提交:

利用框架实现get/post提交不需要再开启子线程。直接在主线程进行get/post的提交,大大的减少了工作量。但操作前需要导包。然后直接创建一个AsyncHttpClient对象,用AsyncHttpClient对象的post方法和get方法,发送请求,并在AsyncHttpResponseHandler()对象中获得相应信息。同样若是post请求,仍旧需要传递值。这里可以用RequestParams对象添加要传递的值。