精华内容
下载资源
问答
  • HttpURLConnection发送Get和Post请求

    万次阅读 2016-05-17 18:07:29
    关于Get和Post的区别,这里就不细说了,网上普遍的说法是: 1、GET请求是从服务器上获取数据,POST请求是向服务器传送数据。 2、GET的请求参数放在URL链接中,POST的请求参数放在body中。 3、GET的URL会有长度上的...

    HttpURLConnection发送Get和Post请求

    HttpURLConnection是java的标准类,可发送get请求和post请求。
    关于Get和Post的区别,这里就不细说了,网上普遍的说法是:
    1、GET请求是从服务器上获取数据,POST请求是向服务器传送数据。
    2、GET的请求参数放在URL链接中,POST的请求参数放在body中。
    3、GET的URL会有长度上的限制,则POST的数据则可以非常大。
    4、POST比GET安全,因为数据在地址栏上不可见。
    5、· · · · · ·
    以上所述的区别,都不是HTTP协议强制要求的,感兴趣的话可以详细去了解,一定能收获很多的,但是归根结底都是HTTP请求,类似的还有PUT、DELETE等等的方式。

    好了,还是来说说代码的使用


    测试类,分别打印GET请求的结果和POST请求的结果

    public class test {
    
        private final static String HTTP_URL = "http://localhost:8080/mycomputer";
        private static HashMap<String, String> mData = new HashMap<String, String>();
    
        public static void main(String[] args) {
            mData.put("name", "HongBin");
            mData.put("sax", "male");
    
            System.out.println("GetResult:" + startGet(HTTP_URL));
            System.out.println("PostResult:" + startPost(HTTP_URL));
        }
    
    }

    Get请求:

    private static String startGet(String path){
            BufferedReader in = null;        
            StringBuilder result = new StringBuilder(); 
            try {
                //GET请求直接在链接后面拼上请求参数
                String mPath = path + "?";
                for(String key:mData.keySet()){
                    mPath += key + "=" + mData.get(key) + "&";
                }
                URL url = new URL(mPath);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.setRequestMethod("GET");
                //Get请求不需要DoOutPut
                conn.setDoOutput(false);
                conn.setDoInput(true);
                //设置连接超时时间和读取超时时间
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(10000);
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                //连接服务器  
                conn.connect();  
                // 取得输入流,并使用Reader读取  
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result.append(line);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //关闭输入流
            finally{
                try{
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result.toString();
        }
    

    Post请求:

        private static String startPost(String path){
            OutputStreamWriter out = null;
            BufferedReader in = null;        
            StringBuilder result = new StringBuilder(); 
            try {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.setRequestMethod("Post");
                // 发送POST请求必须设置为true
                conn.setDoOutput(true);
                conn.setDoInput(true);
                //设置连接超时时间和读取超时时间
                conn.setConnectTimeout(10000);
                conn.setReadTimeout(10000);
                conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    
                out = new OutputStreamWriter(conn.getOutputStream());  
                // POST的请求参数写在正文中
                for(String key:mData.keySet()){
                    out.write(key + "=" + mData.get(key) + "&");  
                }
                out.flush();  
                out.close();
                // 取得输入流,并使用Reader读取  
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result.append(line);
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            //关闭输出流、输入流
            finally{
                try{
                    if(out!=null){
                        out.close();
                    }
                    if(in!=null){
                        in.close();
                    }
                }
                catch(IOException ex){
                    ex.printStackTrace();
                }
            }
            return result.toString();
        }

    注意点:
    1. 因为HttpURLConnection是一个抽象类,所以不能被直接实例化,通过URL.openConnection()方法得到HttpURLConnection的父类,然后再强转成HttpURLConnection对象实例。
    2. 无论是post请求还是get请求,connect()函数实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。但是也可以不通过connect()方法来建立连接,因为getOutputStream()方法会隐式的进行connect。
    3. 方法的调用顺序非常重要,对connection对象的一切配置(就是各种set方法)必须在connect()方法之前调用,getOutputStream()方法必须在getInputStream()之前调用。
    4. 前面说到了各种方法的调用顺序,那么为什么要这样呢。首先HttpURLConnection对象被创建,然后被指定各种选项(例如连接超时时间,是否使用缓存,是否读取输出流等),然后与服务端建立连接。如果已经连接成功再设置这些选项将会报错。
    5. post请求参数是放在正文里面的,正文通过outputStream流写入的,实际上outputStream是个字符串流,往里面写入的东西不会立即发送到网络,而是存在于内存缓冲区中,待outputStream流关闭时,根据输入的内容生成http正文。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个输入流,用于读取服务器对于此次http请求的返回信息。即使outputStream流没有关闭,在调用getInputStream()之后再写入参数也无效了。

    展开全文
  • 相信对于计算机有点了解都听过get与post这两种的请求方式,但是对于这两种请求方式具体区别有可能不太清楚,相信大家在网上关于这两种区别应该一搜索一大把,我也看了下网上其他博客或者简书对于这两种区别...

         相信对于计算机有点了解的都听过get与post这两种的请求方式,但是对于这两种请求方式的具体区别有可能不太清楚,相信大家在网上关于这两种的区别应该一搜索一大把,我也看了下网上其他博客或者简书对于这两种的区别的解释。有好多的说post是用于提交数据用的,而get是从服务器获取数据用的。不能说这两种说法不对,但是太片面,没有根本的解释清楚,其实无论是get还是post都是可以请求数据和提交数据的,主要区别是在于他们的参数携带方式不同,下面我就来说一说,他俩的不同。

         1.get请求方式向服务器请求数据或者是提交数据,所携带的参数是通过拼接在URL之后的,例如http://www.baidu.com/index.html/?username=zhangsan&password=123456

    这个URL中?之后的就是要携带的参数。因为服务器对提交URL的长度有限制,所以就导致URL不能拼接的过长,也就是说URL之后不能携带太多的参数,所以就导致get上传的数据量比较小。

         2.post请求方式和get不同之处就在于携带参数的位置不同,get是拼接在URL之后,而post是放在send()之中,通过管道流的方式断点上传的,由于服务器对每次上传数据的大小有限制,但是对于次数没限制,所以post请求通过断点上传可以多次上传,因此提交的数据量就会比较大。


         但是网上有人说post请求比get请求安全,并不然。之所以有人觉得安全可能是由于post提交的参数是放在http头里传输的,我们一般不能直观的看到所以感觉安全,而get请求方式是在URL之后我们能一目了然所以感觉不安全。我想说这是错误的,因为无论是get还是post请求都是可以通过抓包获取到这些参数数据的,对于会抓包的人来说,没一点难度,所以我说这俩其实都不安全。那怎么整才能安全呢?要我说放哪都一样不安全,想要安全就给参数加入加密算法例如:MD5加密算法等。这样即使被人通过抓包抓到也是密文。

         好啦,就先写到这,没什么代码实际操作全是理论,主要是这俩区别都是以理解为主的。理解就好,其实也没那么复杂!

    展开全文
  • 关于post和get的区别,通过百度,你能看看到形形色色的说法。但是总的来说,大同小异,在这,为这个大杂烩中,我要跳进去了: 首先是来自w3schools的“标准答案”: 1、GET在浏览器回退时是无害的,而POST会再次提交...

    关于post和get的区别,通过百度,你能看看到形形色色的说法。但是总的来说,大同小异,在这,为这个大杂烩中,我要跳进去了:

    首先是来自w3schools的“标准答案”:
    1、GET在浏览器回退时是无害的,而POST会再次提交请求。
    2、GET产生的URL地址可以被Bookmark,而POST不可以。
    3、GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    4、GET请求只能进行url编码,而POST支持多种编码方式。
    5、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    6、GET请求在URL中传送的参数是有长度限制的,而POST么有。
    7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    8、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    9、GET参数通过URL传递,POST放在Request body中。

    在这里我有比上述更加简介的回复方式:

    1、url可见性:

    get,参数url可见;
    post,url参数不可见;

    2、数据传输上:

    get,通过拼接url进行传递参数;
    post,通过body体传输参数

    3、缓存性:

    get请求是可以缓存的
    post请求不可以缓存

    4、后退页面的反应

    get请求页面后退时,不产生影响
    post请求页面后退时,会重新提交请求

    5、传输数据的大小

    get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
    post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。

    6、安全性

    这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

    原文:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/81063997

    最重要的一条,post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据

    post请求的过程:
    (1)浏览器请求tcp连接(第一次握手)
    (2)服务器答应进行tcp连接(第二次握手)
    (3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
    (4)服务器返回100 Continue响应
    (5)浏览器发送数据
    (6)服务器返回200 OK响应
    get请求的过程:
    (1)浏览器请求tcp连接(第一次握手)
    (2)服务器答应进行tcp连接(第二次握手)
    (3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
    (4)服务器返回200 OK响应

    也就是说,目测get的总耗是post的2/3左右,这个口说无凭,网上已经有网友进行过测试。
    (原文:https://blog.csdn.net/zzk220106/article/details/78595108

    get传参最大长度的理解误区
    1.总结
    (1)http协议并未规定get和post的长度限制
    (2)get的最大长度限制是因为浏览器和web服务器限制了URL的长度
    (3)不同的浏览器和web服务器,限制的最大长度不一样
    (4)要支持IE,则最大长度为2083byte,若支持Chrome,则最大长度8182byte
    2.误解
    (1)首先即使get有长度限制,也是限制的整个URL的长度,而不仅仅是参数值数据长度,http协议从未规定get/post的请求长度限制是多少

    (2)所谓的请求长度限制是由浏览器和web服务器决定和设置的,各种浏览器和web服务器的设定均不一样,这依赖于各个浏览器厂家的规定或者可以根据web服务器的处理能力来设定。IE 和 Safari 浏览器 限制 2k,Opera 限制4k,Firefox 限制 8k(非常老的版本 256byte),如果超出了最大长度,大部分的服务器直接截断,也有一些服务器会报414错误。
    (原文:https://blog.csdn.net/zzk220106/article/details/78595108

    理论上,上述的回答,足够面对很多了解大概的人,但是,很多时候,像面试官之类的更想听到的是,更深层更本质的区别,所以,为大家继续说足以装逼的内容:

    我们先从表面看:

    get和post都是HTTP协议中的两种发送请求的方法,

    而HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议,

    HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

    而且据HTTP协议,GET是安全的,也是幂等的,而POST既不是安全的,也不是幂等的。当然这里的安全不是被密码学或者数据保护意义上的安全

    GET和POST还有一个重大区别,简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

    展开全文
  • 今天在进行接口联调时遇到这个问题了,...我有限知识还是无法去确定哪种说法才是对。 看来确实得多多学习。 今天遇到情况抓包是下面这样子样子: GET http://server HTTP/1.1 Host: ip:port User...

    今天在进行接口联调时遇到这个问题了,当时是很茫然的,因为从来没遇过。

    后来又搜索了一下GET和Post的区别。

    然后看见了这篇文章。不再以讹传讹,GET和POST的真正区别

    我有限的知识还是无法去确定哪种说法才是对的。

    看来确实得多多学习。

    今天遇到的情况抓包是下面这样子的样子:

    GET http://server HTTP/1.1
    
    Host: ip:port
    
    User-Agent: XDM-client/OMA1.0
    
    Date: Fre,11 Mar 2016 1:26:25 GMT
    
    Content-Type: application/xml
    
    Accept-Encoding: gzip
    
    Transaction-ID: 10
    
    Content-Length: 100
    
    Connection: close
    
    <name></name><age></age>

    最终是采取在服务端使用HttpServletRequest对象,取得其输入流才得以取出参数的,但是怎样发起这样的请求却还是不得而知。

    继续研究中。

    转载于:https://www.cnblogs.com/ld-swust/p/5266667.html

    展开全文
  • 以下关于jQuery说法错误是() A、$.parseJSON()方法用来返回JSON格式数据,通常需要与$.getJSON()方法联合使用 B、$.ajax()方法是jQuery提供最底层AJAX方法,其它如"$.get()、$.post()、$.getJSON()"等都是...
  • 它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展 ... ... ...二:Get和Post的区别 关于它们的区别可以从以下几个方面来说: ...Get 请求的数据会附在 URL 之后,以 ?...对于这样的说法,只是 H
  • 先谈谈get与post的区别很多人说get方法比post方法安全,我本人并不赞同,这是个片面的说法。在本地环境下,post的参数通常不会保存在浏览器历史里,在提交请求时,get方法的参数直接放在URL上,而post方法则是放在...
  • 文章目录Java_HttpClient前言时间线参考链接API解读几句常见说法一些总结详细解读RequestConfig常见名词解释3个超时名词connectTimeout:连接目标超时socketTimeout :读取数据超时ConnectionRequestTimeout:连接池...
  • POST和GET方法

    2011-07-20 13:20:00
    看了一些网上关于GET和POST方法的区别:GET吧请求的内容添加在URL的后面(用‘?’来划分URL和数据)。而POST方法则把请求内容放在HTTP头中,所有POST会更安全。至于关于GET和POST对长度的限制网上也有一些说法,有...
  • 可以参考的说法<a href="https://github.com/postcss/postcss-loader/issues/35">这里</a></p> 样式压缩 压缩代码我们可以使用webpack的内置插件UglifyJsPlugin来做,它既可以压缩js代码也可以压缩css代码。 ...
  • 1. 以下关于HTTP说法正确是:(题目来源) A. HTTP POST方式比GET更安全 B. HTTP GET请求提交参数没有长度限制 C. HTTP POST请求提交参数没有长度限制 D. HTTP GET和POST请求提交参数都没有长度限制 AC 分析:...
  • 网络编程50选择题

    2012-02-26 16:15:13
    3、关于Tomcat,下列说法正确有( A C )。(多选) A、Tomcat 4.0是Serlet2.3和JSP 1.2规范官方参考实现 B、Tomcat服务器优点是使用简单,并且支持EJB C、JBuilder 9.0 提供默认测试服务器是Tomcat D、...
  • 如果按照"静态文件"的说法, 用html + ajax来获取数据, 那么url就应该是前者, 然而我观察到的现在restful的网站明显不是这么干的. 比如github, Amazon, 他们在浏览器里的url就是 /products/{productid} 这样.
  • 前端测试卷

    2021-02-24 09:10:46
    跨域资源共享规范中规定了除了GET之外HTTP请求,或者搭配某些MINE类型的POST请求,浏览器都需要先发一个OPTIONS请求 D. http://www.bilibili.com和https://www.bilibili.com是相同域名,属于同源 2、
  • 关于爬虫调用Api这一说法,其实就是通过get或者post请求携带着参数,将内容发给对方服务器,服务器会根据请求的Api是哪个来进行处理。 比如说/delete?id=2和/save?id=1&name=antz这两个请求就分别是删除id等于2...
  • 之前两篇已经说完了如何爬取网页以及如何解析其中的数据,那么今天我们就...关于爬虫调用Api这一说法,其实就是通过get或者post请求携带着参数,将内容发给对方服务器,服务器会根据请求的Api是哪个来进行处理。 ...
  • 前端试题大综合练习(二)

    千次阅读 2017-07-21 19:50:45
    1、下列关于date()函数格式代码描述错误的是 A、strstr()用于实现查找字符串 B、strlen()返回的是字符串的...2、下列关于get和post方法传递参数的说法中,正确的是 A、get方法是发送请求HTTP协议通过URL参数传递进行接
  • 1.1.5 关于epoll和select区别,以下哪些说法是正确 1.1.6 从innodb索引结构分析,为什么索引 key 长度不能太长 1.1.7 MySQL数据如何恢复到任意时间点? 1.1.8 NFS 和 SMB 是最常见两种 NAS...
  • 有一种说法认为函数式语言和命令式语言不同在于命令式语言是给计算机下达指令而函数式语言是向计算机描述逻辑。这种思路在Flutter UI中得到了体现。Flutter不提倡去操作UI,它当然也基本不会提供操作View...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

关于post请求的说法