在这个时代,什么都可以没有,但是没有网络是万万不行的,那么我们get和post方式请求网络的时候究竟有什么不同呢?那么现在就让我们来研究研究互联网传输中的GET和POST方式的区别

GET解析

GET和POST都是用于发送HTTP请求的方式,而且是最常用的方式。HTTP的全称:超文本传输协议(HyperText Transfer Protocol),是一种发送和接收HTML页面的方法。当然了HTTP的知识很多,但对于一般开发者而言并不需要了解太多,只需知道HTTP协议。

HTTPURL(URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。eg:1、输入:www.guet.edu.cn浏览器自动转换成:http://www.guet.edu.cn/2、http:192.168.0.116:8080/index.jsp

这里不多说HTTP的太多理论知识,我们直接来看如何通过GET方式请求到HTTP吧!首先创建一个GetAndPost类,然后创建一个它的构造方法,如下:

publicclassGetAndPost{privateString name;privateString password;privateString url;publicGetAndPost(String url,String name,String password){super();this.name=name;this.password=password;this.url=url;}}

这个类很简单,我们就是发送一个注册/登陆请求,其中的URL就是注册/登陆请求的页面的地址,然后输入账号和密码,如果账号为root,密码为123,则在eclipse中打印出“成功”,如果不是则打印“失败”

接下来就是写GET请求的代码了,代码如下:

publicvoiddoGet(){try{// 当出现乱码时,可能是由于编码错误引起,尝试改变编码格式,使用URLEncoder.encode()方法url=url+"?username="+URLEncoder.encode(name,"UTF-8")+"&pwd="+URLEncoder.encode(password,"UTF-8");}catch(UnsupportedEncodingExceptione1){e1.printStackTrace();}InputStreamis=null;InputStreamReaderisr=null;BufferedReaderbufferedReader=null;try{URLhttpUrl=newURL(url);HttpURLConnectionconnection=(HttpURLConnection)httpUrl.openConnection();// 设置读取超时connection.setReadTimeout(5000);// 设置链接超时时间connection.setConnectTimeout(5000);connection.setRequestMethod("GET");// 获得链接请求码if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){is=connection.getInputStream();isr=newInputStreamReader(is);bufferedReader=newBufferedReader(isr);Stringstr=null;StringBuffersb=newStringBuffer();while((str=bufferedReader.readLine())!=null){sb.append(str);}System.out.println("Get方式的result:"+sb.toString());}}···// 关闭流的代码}

在上面的方法中对输入的账号名称和密码使用URLEncoder进行转码,这是因为如果对方网站如果使用的是UTF-8编码,而你传过去的又是GBK编码,那么账号密码传过去被解码的时候会成为乱码,这时可以将URLEncoder.encode(name, "UTF-8")改为URLEncoder.encode(name, "GBK"),即将账号密码转为GBK格式传输过去。

在上面的GET方法的代码有很多,但如果只是讨论get获取HTML,其核心代码只有这五行:

URL httpUrl = new URL(url);HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection();// 设置读取超时connection.setReadTimeout(5000);// 设置链接超时时间connection.setConnectTimeout(5000);connection.setRequestMethod("GET");

首先我们要将String类的url地址转换为URL对象,这时才可以通过HttpURLConnection打开链接地址,然后设置其读取和链接的超时时间,最后就是设置请求的方法。

Get获取HTML页面就是如此。

那么该如何验证它呢?已经搭建好了一个现成的服务器已经搭建好了,资源在项目地址的web文件夹下的bei.rar,解压后在eclipse ee导入,使用tomcat7.0,然后运行即可。

在项目HttpAndParse中的RegisterActivity中设置一个GET方法的点击事件,代码如下:

bt_get=(Button)findViewById(R.id.bt_get);bt_get.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){newThread(newRunnable(){@Overridepublicvoidrun(){finalStringname=et_name.getText().toString().trim();finalStringpassword=et_password.getText().toString().trim();newGetAndPost(url,name,password).doGet();;}}).start();}});

其中的et_name和et_password都是EditText。

在开启本地服务器,运行HttpAndParse项目,点击进入RegisterActivity页面,然后账号填root,密码为123,这时就会打印输出“Get方式的result:成功”。

好了以上就是GET请求方式的全部内容

POST请求方式

POST请求方式也是HTTP常用的网络请求方式。大家也许会有疑问,GET的请求方式已经很好了,为什么还要有POST请求方式呢?

这有两个原因:

1、GET发送请求时其数据大小有限制,理论上不能超过1k,而post则无此限制

2、GET请求时其发送的信息是以url明文发送的,其参数会被保存在浏览器历史或web服务器中,而post则不会

大家或许大致了解了两者的区别,但是不知道他们是如何表现出来的,那么下面我们直接通过get和post请求HTML来了解他们是如何表现出来吧。

继续使用刚才的web服务器,将登陆/注册页面打开,网址为:

http://192.168.xx.xx:8080/bei/

,其中192.168.xx.xx代表的是自己电脑的ip地址。

然后将网址张贴到浏览器中打开,并且按F12将开发人员工具打开。

准备好之后,先点击get方式登陆,在开发人员工具的网络选项中得到下列信息:

GET.png

然后点击返回键,重新选择post方式登陆,得到下列信息:

post.png

大家应该注意到标红色框的地方是两者之间的不同之处了。

GET请求方式其请求URL后面附带有账号密码的参数:“?username=zhangsan&pwd=fwe”

而POST请求方式的URL只有一个单纯的请求地址,而其请求头方面则是多了这几个:

"Content-Length" :请求内容的长度,在本文指发送的账号密码"Cache-Control" :控制HTTP缓存的方法  "Content-Type":表示具体请求中的媒体类型信息"Origin":请求发起者

其中Origin可能根据浏览器的不同而出现或者消失。

OK,我们发现两种的请求URL和请求头有区别,尤其是请求的URL,在POST方法中根本没有,那么去哪了呢?

详细查看浏览器开发人员工具,发现在post请求中正包含了账号密码的信息,原来这些信息是放到了这里!

Post2.png

了解了这些之后,我们终于知道两者直接在请求之时的具体不同之处了,那么接下来就是该如何写post请求方式的代码了,在GetAndPost中添加POST请求方法,代码如下:

publicvoiddoPost(){InputStreamis=null;InputStreamReaderisr=null;BufferedReaderbufferedReader=null;try{URLhttpUrl=newURL(url);····    connection.setRequestMethod("POST");Stringcontent="username="+name+"&pwd="+password;connection.setRequestProperty("Content-Length",content.length()+"");connection.setRequestProperty("Cache-Control","max-age=0");connection.setRequestProperty("Origin","http://192.168.2.124:8080");OutputStreamoutputStream=connection.getOutputStream();outputStream.write(content.getBytes());if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){·····      System.out.println("Post方式的result:"+sb.toString());}}·····}

详细的代码请查看项目,在上面的代码中省略的都是与get方法相同的代码,我们在代码中将Content-Length等请求头信息写好,然后通过OutputStream输出流将请求正文(账号密码)转换为字节输出,发送到服务器中。

同样的也是在RegisterActivity中使用,代码如下:

bt_post=(Button)findViewById(R.id.bt_post);bt_post.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){newThread(newRunnable(){@Overridepublicvoidrun(){finalStringname=et_name.getText().toString().trim();finalStringpassword=et_password.getText().toString().trim();newGetAndPost(url,name,password).doPost();;}}).start();}});

以上就是GET和POST请求方式的不同之处了,相信了解这些之后,对于get和post请求再也不会陌生了。

参考博客:

HTTP相关知识:

http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

get与post区别:

http://blog.csdn.net/debugingstudy/article/details/10243605

浅谈HTTP中Get与Post的区别

http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

Cache-Control的相关博客:

http://www.cnblogs.com/yuyii/archive/2008/10/16/1312238.html

Content-Type的相关博客:

http://blog.csdn.net/blueheart20/article/details/45174399

Post 和 Get方法相关推荐

  1. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  2. Java面试题大全2021版

    一.Java 基础 JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...

  3. Kotlin协程使用,协程使用注意事项,协程中的await方法使用|不使用suspend使用协程

    参见 码云 协程使用方法一 (Dispatchers调度器模式) 指定不同线程.同线程会挂起并阻塞(挂起是不影响主线程执行,阻塞是同样的IO线程会阻塞) withContext(Dispatchers ...

  4. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  5. IDEA自动生成对象所有set方法

    idea中有一款插件能够生成对象所有的set方法,GenerateAllSetter :下载地址 步骤1:将下载好的压缩包放在自己记得的文件夹中,在idea中进行导入 步骤2:在本地选中刚才的压缩包, ...

  6. List元素互换,List元素转换下标,Java Collections.swap()方法实例解析

    Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...

  7. java1.8新增超实用Map方法——Map.getOrDefault()和Map.value()方法详解

    1. Map.getOrDefault() 翻译一下官方解释: java.util.Map<K, V> V getOrDefault(Object key, V defaultValue) ...

  8. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  9. Java Calendar.add()方法的使用,参数含义。指定时间差。

    cal.add()方法中的参数含义: 第一个参数如果是1则代表的是对年份操作,2是对月份操作,3是对星期操作,5是对日期操作,11是对小时操作,12是对分钟操作,13是对秒操作,14是对毫秒操作. 第 ...

  10. 设置select下拉框不可修改的→“四”←种方法

    设置select下拉框为不可修改的几种方法: 因为select的特殊性,导致它不能像input表单一样简单地设置一个readonly来限制修改,所以,我们需要进行别的操作! 1.为下拉框添加样式,可以 ...

最新文章

  1. java反射用在哪里_Java反射
  2. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
  3. ai怎样导出所选部分_Adobe Photoshop批量导出照片+模糊照片变清晰+火焰字体制作介绍...
  4. linux防火墙 限制端口,Linux开启防火墙并限制开放端口
  5. 62 getproperty对象
  6. 雨尘SEO静态页面生成系统版本源码3秒钟可生成上千条单页面SEO必备神器
  7. Python:int,float,str之间的转换
  8. Week 1 Team Homework #3 from Z.XML-软件工程在北航
  9. 如何在台式电脑上添加无线网络连接服务器,台式电脑怎么无线上网?台式电脑无线网络设置教程...
  10. 爬取小鸟高清美女壁纸
  11. 个人建站系列步骤流程(四.域名备案)
  12. 在绝望中寻找希望-中篇 写给年轻人
  13. Linux权限中x是什么意思,linux里的drwxr-xr-x代表的意思
  14. 关于逆向工程,解决mysql数据库遇到的1406问题,ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
  15. 一键反编译安卓apk文件
  16. docker搭建redis集群
  17. 智能对话之对话管理综述
  18. 24段魔尺--小海龟图案
  19. python程序语言和机器人控制-利用树莓派+Python语言制作一部机器人就是如此简单!...
  20. MapReduce操作实例

热门文章

  1. ewb交通灯报告和文件_基于EWB的交通灯设计
  2. buildroot patch 补丁文件使用方法
  3. python 自动化办公实例_Python控制Excel实现自动化办公
  4. 总线 —— 总线仲裁
  5. Ubuntu下安装网络电视sopcast
  6. C++—— 数组名与向量名
  7. 基于JAVA高校共享机房管理系统的设计与实现计算机毕业设计源码+系统+数据库+lw文档+部署
  8. 怎么用一分钟,画出一份思维导图?
  9. java构造一个银行账户类
  10. 【JZOJ A组】初音未来