精华内容
下载资源
问答
  • POST提交数据时四种常见的数据格式

    千次阅读 2018-07-02 16:50:11
    其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息...

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。

    我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:

    <method> <request-URL> <version>
    <headers>
    
    <entity-body>

    协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。

    但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。下面就正式开始介绍它们。

    1. application/x-www-form-urlencoded

    这应该是最常见的 POST 提交数据的方式了。浏览器的原生 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了):

    POST http://www.example.com HTTP/1.1
    Content-Type: application/x-www-form-urlencoded;charset=utf-8
    
    title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
    首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。例如 PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。

    很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默认值都是「application/x-www-form-urlencoded;charset=utf-8」。 


    我这里用soupui调用选的xml格式Media Type为 application/xml ,这里是不对的。我改成 application/x-www-form-urlencoded这种格式后,xml报文也改成key=value形式:

    requestMessage=<?xml version=...><itxEnvelope>...</itxEnvelope>

    再调用就可以了。就是仿form表单提交这种数据提交方式完成请求的。

    2. multipart/form-data

    这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 表单的 enctype 等于 multipart/form-data。直接来看一个请求示例:

    POST http://www.example.com HTTP/1.1
    Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
    
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="text"
    
    title
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="file"; filename="chrome.png"
    Content-Type: image/png
    
    PNG ... content of chrome.png ...
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

    这个例子稍微复杂点。首先生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂。然后 Content-Type 里指明了数据是以 multipart/form-data 来编码,本次请求的 boundary 是什么内容。消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 –boundary 开始,紧接着是内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体最后以 –boundary– 标示结束。关于 multipart/form-data 的详细定义,请前往 rfc1867 查看。 

    这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持。 
    上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 表单也只支持这两种方式(通过 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain,不过用得非常少)。 
    随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,给开发带来更多便利。

    3. application/json

    application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。 


    JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。 
    Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。例如下面这段代码:

    var data = {'title':'test', 'sub' : [1,2,3]};
    $http.post(url, data).success(function(result) {
        ...
    });

    最终发送的请求是:

    POST http://www.example.com HTTP/1.1 
    Content-Type: application/json;charset=utf-8
    
    {"title":"test","sub":[1,2,3]}

    这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 php 框架已经开始这么做了。 


    当然 AngularJS 也可以配置为使用 x-www-form-urlencoded 方式提交数据。如有需要,可以参考这篇文章

    4. text/xml

    我的博客之前提到过 XML-RPC(XML Remote Procedure Call)。它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:

    POST http://www.example.com HTTP/1.1 
    Content-Type: text/xml
    
    <?xml version="1.0"?>
    <methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
            <param>
                <value><i4>41</i4></value>
            </param>
        </params>
    </methodCall>

    XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服务等等。JavaScript 中,也有现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。

    参考博文:四种常见的 POST 提交数据方式

    展开全文
  • JAVA中POST提交数据

    千次阅读 2019-02-22 14:07:11
    POST提交JSON格式数据,且有返回状态。代码如下: import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import org.apache.http.HttpResponse...

    POST提交JSON格式数据,且有返回状态。代码如下:

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import net.sf.json.JSONArray;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    import com.pojo.User;
    
    public class PostTest {
    	public static void main(String[] args) {
    		try {
    			HttpClient client = new DefaultHttpClient();
    			HttpPost httpPost = new HttpPost("http://ip:port/divice/third?type=unitInfo");
    			//实体类
    			List<User> sysList = new ArrayList<User>();
    			JSONArray object = JSONArray.fromObject(sysList);
    			//构造消息头
    			httpPost.setHeader("Content-Type","application/json; charset=utf-8");
    			StringEntity postEntity = new StringEntity(object.toString(), "utf-8");
    			// 发送JSON格式的数据请求
    			postEntity.setContentType("application/json");
    			httpPost.setEntity(postEntity);
    			//提交请求
    			HttpResponse response = client.execute(httpPost);
    			//打印请求返回的code
    			System.out.println(response.getStatusLine().getStatusCode());
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    有更简单是方式欢迎交流!

    展开全文
  • 常见的POST提交数据方式

    千次阅读 2019-03-12 17:21:27
    HTTP的请求方法POST是再常见不过的了,这里详细地说明四种常用的提交数据方案,巩固下基础。 在说POST之前,先看下HTTP请求的结构,分为三个部分:状态行、请求头、消息主体 &lt;method&gt; &lt;...

    HTTP的请求方法POST是再常见不过的了,这里详细地说明四种常用的提交数据方案,巩固下基础。

    在说POST之前,先看下HTTP请求的结构,分为三个部分:状态行、请求头、消息主体

    <method> <request-URL> <version>

    <headers>

    <entity-body>

    我们在代码中,通过new一个XMLHttpRequest实例时,就是创建了一个http请求,然后我们会指定使用GET、POST、UPDATE、DELETE等方法,以及请求的URL地址。对于POST而言,数据是放在消息主体中,但是并没有规定必须使用什么编码,我们可以自己决定消息主体的格式。

    请求发送到服务端,需要服务端解析成功才有用。通常,是根据请求头中的Content-Type字段来判断消息主体用的是哪种方式编码,再对主体进行解析。所以,POST提交数据,涉及到Content-Type和消息主体编码方式两部分。

    1.application/x-www-form-urlencoded

    这是最常见的POST提交数据的方式了。原生的form表单,如果不设置enctype属性,最终就是以application/x-www-form-urlencoded方式提交数据。类似:

    POST http://www.example.com HTTP/1.1 
    
    Content-Type: application/x-www-form-urlencoded;charset=utf-8
    
    title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

    提交的数据按照key1=val1&key2=val2的方式进行编码,key和val都进行了转码。很多封装的库中的ajax请求,也是默认使用这种方式,jquery和axios

    2.multipart/form-data

    也是一种常见的POST提交方式,在使用表单上传文件时,必须让form表单的enctype等于multipart/form-data

    POST http://www.example.com HTTP/1.1
    Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
    
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="text"
    
    title
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA
    Content-Disposition: form-data; name="file"; filename="chrome.png"
    Content-Type: image/png
    
    PNG ... content of chrome.png ...
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

    这种方式一般用于上传二进制文件,例如图像、视频这种。

    3.application/json;charset=utf-8

    POST提交json格式的数据,告诉服务器消息主体是序列化后的JSON字符串。支持比键值对更加复杂的结构化数据。

        ajax: {
            url: '/users/login_success',
            method: 'POST',
            data: function(){
                return JSON.stringify({
                    "phone": phone.value,
                    "password": password.value
                })
            },
            success: function(res){
                console.log(res);
            },
            
        }

     

     

     

     

     

     

     

     

    展开全文
  • POST提交数据加密

    热门讨论 2013-01-19 16:43:31
    POST提交数据加密使用HttpWatch获取的数据是加密后的 用户名user1 密码:123456
  • ajax实现表单post提交数据

    千次阅读 2020-02-11 16:32:17
    1.禁用表单提交οnsubmit=“return false” 2.tp框架控制器不可以用new Request方式调用请求类方法,改用静态调用Request请求类 前端form表单 <form onsubmit="return false" class="form-horizontal" id="login...

    方法一:
    1.禁用表单提交οnsubmit=“return false”
    2.tp框架控制器不可以用new Request方式调用请求类方法,改用静态调用Request请求类

    前端form表单

            <form onsubmit="return false" class="form-horizontal"  id="login" >
                <div class="form-group">
                    <label for="inputEmail1" class="col-sm-2 control-label">用户名:</label>
                    <div class="col-sm-10">
                        <input type="text" name="name" class="form-control" id="inputEmail1" placeholder="UserName">
                    </div>
                </div>
            
    	        <div class="form-group">
    	            <div class="col-sm-offset-2 col-sm-10">
    	                <button type="submit" class="btn btn-primary" id="register">注册</button>
    	                <button class="btn btn-warning" id="sub">测试</button>
    	            </div>
    	        </div>
            </form>
    

    js代码

        <script>
        $(function(){
            $('#sub').click(function(){
    //            alert($("#inputEmail1").val());
               var url = "{:url('user/insert')}";
               //类似ajax的提交
               $.post(url,{"name":$('#inputEmail1').val()},function(res){
                   console.log(res);
               },'json')
            });
        });
        </script>
    

    控制器代码

    <?php
    
    namespace app\index\controller;
    
    use app\common\controller\Base;
    use app\common\model\User as UserModel;
    use think\facade\Request;
    use  think\facade\Session;
    
    class User extends Base
    {
        //注册页面
        public function register()
        {
            $this->view->assign('title', '用户注册');
            return $this->view->fetch();
        }
    
        //处理用户提交的用户信息
        public function insert()
        {
            //    不能使用new Request去调用请求类,new Request 会再次实例化这个对象 把ajax的参数重置是看不发送到控制器的表单数据的,谨记
            //打印
            dump(Request::method());
            dump(Request::post());
            exit;
    
        }
    

    结果
    在这里插入图片描述方法二

    <script>
        $(function(){
            //要获取表单提交的数据分两步  第一步:绑定事件,第二步:表单序列化
            $("#register").on('click',function(){
                //第二步:表单序列化
    // alert($('#login').serialize());
                $.ajax({
                    //请求方式
                    type : "POST",
                    //请求地址
                    url:"{:url('Index/user/insert')}",
                    data: $('#login').serialize(),
                    dataType:'json',
                    //请求成功
                    success:function(data) {
                        console.log(data);
                    }
                });
            });
        });
        </script>
    
    展开全文
  • 四种常见的 POST 提交数据方式

    千次阅读 2018-06-29 12:38:25
    来源:https://my.oschina.net/u/1391136/blog/786725Http Content-Type1. About在HTTP 1.1规范中,HTTP请求方式有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 通常我们用的只有GET、POST,然而对于...
  • post提交数据长度限制问题

    千次阅读 2020-06-08 11:03:10
    修改Tomcat服务器conf文件夹下server.xml文件中的maxPostSize = -1,不限制post请求大小进行限制,默认值2M,单位为byte 注意 不同版本的tomcat所设置的maxPostSize值也不同 参考博客:...
  • 前端四种常见的 POST 提交数据方式

    千次阅读 2018-10-31 10:42:34
    版权声明:本文为博主原创文章,如若转载请注明【PHP自学辅导】。 ... 原文地址:四种常见的 POST 提交数据方式HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、G...
  • Python中post提交数据格式攻略

    千次阅读 2018-08-14 23:22:58
    公司里新来了几个爬虫,感觉他们对post提交的格式问题, 不是特别清楚。 关于post提交,我们经常见到的就是在html网页中使用, 经常遇到两种格式 1 表单 2 json提交 1 (表单提交) 我们可以打开google浏览器...
  • PostMan 四种常见的 POST 提交数据方式

    千次阅读 2018-11-24 11:24:50
    其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。   协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全...
  • php实现post提交数据

    千次阅读 2017-06-26 13:06:59
    php实现post提交数据
  • post提交数据的方式,主要体现在http协议头上的Content-Type字段,不同的Content-Type对应不同的http请求体,与之相应的php接收数据方法也不同。 1.application/x-www-form-urlencoded 1.1发送 html中的form表单,...
  • 我们在使用post, put, patch, delete, options等方法的时候, 他们都有方法体body, 用来存储数据.而body的类型可以有: form-data、x-www-form-urlencoded、raw、binary 1. form-data 就是http请求中的multipart/...
  • post提交数据返回404错误

    千次阅读 2018-03-05 17:18:11
    使用post提交数据,发现无法执行success函数,后台的代码也正常执行了,但是就是无法执行success函数,执行error函数,我在MainConfig中做了一个映射js代码:实在是看不出哪里错了 ,求大神指点...
  • post向后台提交数据达到限制时,无法成功提交数据的问题。
  • python3 requests 动态网页post提交数据

    千次阅读 2018-08-03 15:57:31
    1.登录清博大数据网站(http://www.gsdata.cn/)(想采集微信文章的可以来这里) import requests import json conn = requests.session() # 登录 ...postdata = { 'username': '******', 'pa...
  • POST提交数据太大

    万次阅读 2016-07-28 13:54:58
    POST数据按道理说是没有大小限制的,只是取决于浏览器或服务器的配置,tomcat的解决方式参考方案2.------------------分割线------------------------场景:之前帮客户做...
  • $.ajax中contentType 和 dataType , contentType 主要设置你发送给服务器的格式,dataType设置你收到服务器数据的格式。在http 请求中,get 和 post 是最常用的。在 jquery 的 ajax 中, contentType都是默认的值:...
  • java中使用post提交数据

    千次阅读 2016-03-01 10:49:46
    1.get是从服务器获取数据,post是向服务器提交数据。 2.get是将参数的值添加到url的结尾处即可。但是参数的值应该遵循以下的规则:  a.保留a-z,A-Z,0-9以及 . - * _ 。  b.用+代替所有的空格。  c.将其他的所有...
  • Http POST 提交数据的四种方式解析

    千次阅读 2017-01-05 15:40:17
    HTTP 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、...其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 协议规定 POST 提交的数据必须放在消息主体(entity-bo
  • 之前我去面试,面试的人问了我些问题,其中令我印象深刻的就是如题的两个,回来后特意去查找了一下,关于http get提交数据上限,之前只知道数据上限差不多是几kb大小,具体为什么却没有了解httpget是通过url来传递...
  • post提交数据时显示异常

    千次阅读 2017-09-30 10:00:16
    post提交数据时候显示如下:The page has expired due to inactivity. Please refresh and try again这是由于在laravel框架中有此要求:任何指向 web 中 POST, PUT 或 DELETE 路由的 HTML 表单请求都应该包含一个 ...
  • 1、Content-Type: application/json import axios from 'axios' let data = {"code":"1234","name":"yyyy"};...axios.post(`${this.$url}/test/testRequest`,data) .then(res=>{ console.log('res=>',re...
  • Arduino Yun 通过 Post 提交数据

    千次阅读 2016-09-29 09:51:50
    #include #include #include #include #include #include #include #include #include IPAddress server(10,0,0,9); YunClient client; String parametri =""; //String of POST parameters v
  • 以前还真没注意过有这个问题,也是今天项目中遇到的问题,在后台form中,通过ajax请求返回了一个有很多input的form表单,提交数据后,要格式化数组时发现提交过来的数据不完整。 刚开始以为是ajax返回的表单有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 382,179
精华内容 152,871
关键字:

post提交数据