post_postman - CSDN
post 订阅
post由中华人民共和国国家邮政局提供的邮政信息服务。包括服务资料和有关信息。POST方法也是HTTP协议中的一个重要组成部分。POST方法一般用来向目的服务器发出更新请求,并附有请求实体。 展开全文
post由中华人民共和国国家邮政局提供的邮政信息服务。包括服务资料和有关信息。POST方法也是HTTP协议中的一个重要组成部分。POST方法一般用来向目的服务器发出更新请求,并附有请求实体。
信息
指定消息加入窗口的消息队列
包    括
服务资料和有关信息
中文名
post
目的服务器发出更新请求
postPB
功能将指定消息加入到某个窗口的消息队列中,这个窗口既可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。语法Post( handle, messageno, word, long )参数handle:long类型,指定窗口的系统句柄,将向该窗口邮寄消息messageno:UnsignedInteger类型,指定要邮寄的消息号 word:long类型,指定与消息一起邮寄的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起邮寄的long型参数值或字符串返回值Boolean。如果任何参数的值为NULL,Post()函数返回NULL。Post()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序中,它并不等待相应事件事件处理程序的执行。这一点与Send()函数不同,Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Post()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。如果应用程序要邮寄PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用PostEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Post()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。
收起全文
精华内容
参与话题
  • IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,...码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序...

    IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。

    此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。

    码农:你知道get和post请求到底有什么区别?
    程序员:你看这篇就知道了。
    码农:你月薪三万了?
    程序员:嗯。
    码农:你是怎么做到的?
    程序员:我做梦做到的

    前言
    这个问题几乎面试的时候都会问到,是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎。

    关于get和post如果你有条件上百度的话,至少有200百万条结果,每个人都有每个人的思考,当然,这篇也是我的思考,如果有些结论有错误,希望能够喷起来。在批评中不断改进,与诸君共勉一句话:若批评无意义,则赞美无意义。
    文章目录
    前言
    01 特点
    1.1 http的特点
    1.2 请求方法
    1.3 我们耳熟能详的的区别
    02 常见的误区
    2.1 误区一
    2.2 误区二
    2.3 误区三
    2.4 误区四:“GET产生一个TCP数据包;POST产生两个TCP数据包。”
    3 http状态码附录
    3.1 状态码1xx
    3.2 状态码2xx:成功
    3.3 状态码3xx:重定向
    3.4 状态码4xx:客户端错误
    3.5 状态码5** 服务端错误
    01 特点
    1.1 http的特点
    基于tcp/ip、一种网络应用层协议、超文本传输协议HyperText Transfer Protocol
    工作方式:客户端请求服务端应答的模式
    快速:无状态连接
    灵活:可以传输任意对象,对象类型由Content-Type标记
    客户端请求request消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据

    服务端响应response也由四个部分组成,分别是:状态行、消息报头、空行、响应正文

    1.2 请求方法
    http请求可以使用多种请求方法。
    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

    HTTP2.0 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

    多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

    header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

    服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。
    参考链接:https://baike.baidu.com/item/HTTP%202.0/12520156?fr=aladdin

    1 GET 请求指定的页面信息,并返回实体主体。
    2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
    5 DELETE 请求服务器删除指定的页面。
    6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    7 OPTIONS 允许客户端查看服务器的性能。
    8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
    1.3 我们耳熟能详的的区别
    http协议最常见的两种方法GET和POST,这几点答案其实有几点并不准确

    请求缓存:GET 会被缓存,而post不会

    收藏书签:GET可以,而POST不能

    保留浏览器历史记录:GET可以,而POST不能

    用处:get常用于取回数据,post用于提交数据

    安全性:post比get安全

    请求参数:querystring 是url的一部分get、post都可以带上。 get的querystring(仅支持urlencode编码),post的参数是放在body(支持多种编码)

    请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制

    02 常见的误区

    get和post误区
    针对上面常见的区别,如果面试的时候这么说,肯定是有很大的毛病,刚在学校面试的时候也曾经囫囵吞枣地这样说过,现在回过头再想以前的错误认知,又有许多新的认识。

    2.1 误区一
    “用处:get常用于取回数据,post用于提交数据”

    曾听到过这样一种说法:get替换post来优化网站性能,虽然这种说法没错,也的确get常被用于取回数据,但是post也被一些ui框架使用于取回数据,比如kendo ui中的grid,就是用post来接受数据的。所以结论是get、post用途也是因地制宜。如果你有使用过kendo UI,会发现分页、过滤、自定义的参数都包含在form data里面。

    请求参数
    get是querystring(仅支持urlencode编码),post是放在body(支持多种编码)
    query参数是URL的一部分,而GET、POST等是请求方法的一种,不管是哪种请求方法,都必须有URL,而URL的query是可选的,可有可无。

    2.2 误区二
    “请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制”

    这句话看上去实在没毛病啊,菜鸟教程也是这样说的啊。虽然字面意思上没有错误,但是理解一定要正确。我想说的是GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制

    下面就是对各种浏览器和服务器的最大处理能力做一些说明

    IE浏览器对URL的最大限制为2083个字符
    Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符。
    Safari (Browser):URL最大长度限制为 80,000个字符。
    Opera (Browser):URL最大长度限制为190,000个字符。
    Google (chrome):URL最大长度限制为8182个字符。
    Apache (Server):能接受最大url长度为8,192个字符。
    Microsoft Internet Information Server(IIS):能接受最大url的长度为16,384个字符。
    所以为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)。当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只收web服务器的影响了。对于中文的传递,一个汉字最终编码后的字符长度是9个字符。

    最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了。

    2.3 误区三
    “post比get安全性要高”

    这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会。另外get提交数据还可能会造成CSRF攻击。

    2.4 误区四:“GET产生一个TCP数据包;POST产生两个TCP数据包。”
    这一点理解起来还是有一定难度的,实际上,不论哪一种浏览器,在发送 POST 的时候都没有带 Expect 头,server 也自然不会发 100 continue。通过抓包发现,尽管会分两次,body 就是紧随在 header 后面发送的,根本不存在『等待服务器响应』这一说。
    从另一个角度说,TCP 是传输层协议。别人问你应用层协议里的 GET 和 POST 有啥区别,你回答说这俩在传输层上发送数据的时候不一样,确定别人不抽你?
    参考资料:https://zhuanlan.zhihu.com/p/25028045

    3 http状态码附录
    3.1 状态码1xx
    100 Continue:
    服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
    101 Switching Protocols:
    服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。
    102: 由WebDAV(RFC 2518):
    扩展的状态码,代表处理将被继续执行
    3.2 状态码2xx:成功
    200 OK:
    请求成功(其后是对GET和POST请求的应答文档。)
    201 Created:
    请求被创建完成,同时新的资源被创建。
    202 Accepted:
    供处理的请求已被接受,但是处理未完成。
    203 Non-authoritative Information:
    文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。
    204 No Content:
    没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
    205 Reset Content:
    没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
    206 Partial Content:
    客户发送了一个带有Range头的GET请求,服务器完成了它。
    3.3 状态码3xx:重定向
    300 Multiple Choices:
    多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
    301 Moved Permanently:
    所请求的页面已经转移至新的url
    302 Found:
    所请求的页面已经临时转移至新的url。
    303 See Other:
    所请求的页面可在别的url下被找到。
    304 Not Modified:
    未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
    305 Use Proxy:
    客户请求的文档应该通过Location头所指明的代理服务器提取。
    306 Unused:
    此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
    307 Temporary Redirect:
    被请求的页面已经临时移至新的url。
    3.4 状态码4xx:客户端错误
    400 Bad Request:
    服务器未能理解请求。
    401 Unauthorized:
    被请求的页面需要用户名和密码。
    401.1:
    登录失败。
    401.2:
    服务器配置导致登录失败。
    401.3:
    由于 ACL 对资源的限制而未获得授权。
    401.4:
    筛选器授权失败。
    401.5:
    ISAPI/CGI 应用程序授权失败。
    401.7:
    访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
    402 Payment Required:
    此代码尚无法使用。
    403 Forbidden:
    对被请求页面的访问被禁止。
    404 Not Found:
    服务器无法找到被请求的页面。
    405 Method Not Allowed:
    请求中指定的方法不被允许。
    406 Not Acceptable:
    服务器生成的响应无法被客户端所接受。
    407 Proxy Authentication Required:
    用户必须首先使用代理服务器进行验证,这样请求才会被处理。
    408 Request Timeout:
    请求超出了服务器的等待时间。
    409 Conflict:
    由于冲突,请求无法被完成。
    410 Gone:
    被请求的页面不可用。
    411 Length Required:
    “Content-Length” 未被定义。如果无此内容,服务器不会接受请求。
    412 Precondition Failed:
    请求中的前提条件被服务器评估为失败。
    413 Request Entity Too Large:
    由于所请求的实体的太大,服务器不会接受请求。
    414 Request-url Too Long:
    由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
    415 Unsupported Media Type:
    由于媒介类型不被支持,服务器不会接受请求。
    416 Requested Range Not Satisfiable:
    服务器不能满足客户在请求中指定的Range头。
    417 Expectation Failed:
    执行失败。
    423:
    锁定的错误。
    3.5 状态码5** 服务端错误
    500 Internal Server Error:
    请求未完成。服务器遇到不可预知的情况。
    501 Not Implemented:
    请求未完成。服务器不支持所请求的功能。
    502 Bad Gateway:
    请求未完成。服务器从上游服务器收到一个无效的响应。
    503 Service Unavailable:
    请求未完成。服务器临时过载或宕机。
    504 Gateway Timeout:
    网关超时。
    505 HTTP Version Not Supported:
    服务器不支持请求中指明的HTTP协议版本。
    ————————————————
    版权声明:本文为CSDN博主「dotnet全栈开发」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/kebi007/article/details/103059900

    展开全文
  • Post请求基本步骤

    千次阅读 2018-09-09 10:24:46
    接着我的博客前后端交互来,使用Post请求完成操作。 get方法从服务器获取数据。post方法向服务器提交数据。 public class MainActivity extends AppCompatActivity { OkHttpClient okHttpClient=new ...

    接着我的博客前后端交互来,使用Post请求完成操作。

    get方法从服务器获取数据。post方法向服务器提交数据。

    public class MainActivity extends AppCompatActivity {
        OkHttpClient okHttpClient=new OkHttpClient();
        private TextView textView;
        public String string=null;
        private String mBaseUrl="http://192.168.43.248:8080/OkHttp_Get/";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
        public void doPost(View view){
                //post参数并不是拼接到url后面,而是作为请求体发送到服务端的。post方法需要传入一个RequestBody
                //get一般是从服务器获取一些数据,即使是传递参数也比较简单。直接拼接到url后面就可以了
                // post一般往服务器提交一些数据,提交表单注册信息,他所提交的一些数据比如说参数一般是作为请求体post到服务器端的。需要requestbody构造request。
                //如何构造request呢?它也有builder.
            textView=(TextView)findViewById(R.id.textView);
            //1.拿到okHttpClient对象
            FormEncodingBuilder requestBodyBuilder=new FormEncodingBuilder();
            //2.构造Request
            //2.1构造requestBody
            RequestBody requestBody=requestBodyBuilder.add("username","hyman").add("password","123").build();//它只有三个方法,仅仅是为了传递键值对的。
            Request.Builder builder=new Request.Builder();
            Request request= builder.url(mBaseUrl+"login").post(requestBody).build();
            //3  4
            executeRequest(request);
        }
        public void doGet(View view){
            textView=(TextView)findViewById(R.id.textView);
            //OkHttpClient okHttpClient=new OkHttpClient();
            Request.Builder builder=new Request.Builder();
            Request request=builder.get().url(mBaseUrl+"login?username=hyman&password=123").build();
            executeRequest(request);
        }
    
        private void executeRequest(Request request) {
            Call call = okHttpClient.newCall(request);
    
            call.enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    L.e("onFailure"+e.getMessage());
                    e.printStackTrace();
                }
    
                @Override
                public void onResponse(Response response) throws IOException {
                    L.e("onResponse:");
                    //该方法的返回值是response,所以我们可以通过response拿到相关信息。
                    string = response.body().string();//想拿到字符串,可以从response-body-string
                    L.e(string);
                    /*InputStream is=response.body().byteStream();//即使是一个文件我们这里也可以IO操作。容量也就是我们一个buffer大小。这样就支持大文件下载。*/
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(string);
                        }
                    });
                }
            });
        }
    }
    

    点击Post按钮,在textview上出现Login success

    MyEclipse控制台出现:hyman , 123

    使用post请求往服务器传输数据得到hyman 123,然后在前端也就是我们的模拟器上显示内容。

    get和简单的post的用法就结束了。

     

    postString方法:

    我们在实际开发过程中有一个post Json字符串到服务器。字符串中可能包含了很多信息(业务代码)。

     

    //将String作为requestBody post出去。和doPost唯一不同的是,requestBody的构造。
    // doPost是通过 FormEncodingBuilder去构造的,它主要是传递一个post参数的builder,
    // 我们要通过一个Builder构造一个requestBody,这个requestBody仅仅是一个字符串。我们不需要构造模式了
    public void doPostString(View view){
        textView=(TextView)findViewById(R.id.textView);
        //传递一个String
        RequestBody requestBody= RequestBody.create(MediaType.parse("text/plain;charset=utf-8"),"{username:hyman,password:123}");
        Request.Builder builder=new Request.Builder();
        Request request= builder.url(mBaseUrl+"postString").post(requestBody).build();
        //3  4
        executeRequest(request);
    }
    

    RequestBody的create方法:

    在MyEclipse userAction添加:

      //获取传递过来的String对象。postString()方法还需要配置。
        public String postString() throws IOException{
            HttpServletRequest request=ServletActionContext.getRequest();
            ServletInputStream is=request.getInputStream();
            //流变成字符串
            StringBuilder sb=new  StringBuilder();
            int len=0;
            byte[] buf=new byte[1024];
            while((len=is.read(buf))!=-1){
                sb.append(new String(buf,0,len));
            }
            System.out.println(sb.toString());
            return null;

        }

    struts.xml中添加:

     <action name="postString" class="com.imooc.action.UserAction" method="postString">
     </action>

    我们的预期结果是服务器端接收到{username:hyman,password:123}字符串。

    运行AS:点击POST STRING按钮。服务器MyEclipse控制台出现 {username:hyman,password:123

     

    我们介绍完了post与传递key value,postString接下来介绍用post传递File到服务端。

     

    public void doPostFile(View view){
        textView=(TextView)findViewById(R.id.textView);
        File file=new File(Environment.getExternalStorageDirectory(),"banner2.jpg");
        if(!file.exists()){
            L.e(file.getAbsolutePath()+"not exist!");
            return;
        }
        //mime type
        RequestBody requestBody= RequestBody.create(MediaType.parse("application/octet-stream"),file);
        Request.Builder builder=new Request.Builder();
        Request request= builder.url(mBaseUrl+"postFile").post(requestBody).build();
        //3  4
        executeRequest(request);
    }

     public String postFile() throws IOException{
            HttpServletRequest request=ServletActionContext.getRequest();
            ServletInputStream is=request.getInputStream();
            //files在Tomcat/webapps/OkHttp_Get,在这里新建文件夹files.
            String dir=ServletActionContext.getServletContext().getRealPath("files");
            File file=new File(dir,"banner2.jpg");
            FileOutputStream fos=new FileOutputStream(file);
            int len=0;
            byte[] buf=new byte[1024];
            while((len=is.read(buf))!=-1){
                fos.write(buf,0,len);
                
            }
            fos.flush();
            fos.close();
            
            return null;

        }

    struts.xml:

     <action name="postFile" class="com.imooc.action.UserAction" method="postFile">

     </action>

    把图片上传到服务器有权限问题,

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    post上传文件:到此我们已经完成了get post提交参数,post提交String,post提交file。还有post上传文件。了解过web的朋友肯定知道post是upload的一个文件,比如说一个表单,注册信息,填写相关的用户密码上传头像甚至是附件等等。post还可以提交文件。web开发的朋友知道它有一个属性,MultipartFormData必须设置到表单上面。OkHttp是如何上传图片的?

     

    //传递头像。
    public void doUpload(View view){
        textView=(TextView)findViewById(R.id.textView);
        File file=new File(Environment.getExternalStorageDirectory(),"banner2.jpg");
        if(!file.exists()){
            L.e(file.getAbsolutePath()+"not exist!");
            return;
        }
        //因为我们设计到文件还有参数可以考虑到又是一个构造者模式。其所涉及到的类叫MultipartBuilder.
        //"mPhoto"表单域,一般情况它是个input标签,他的type是file,所有的表单域都有个共性他有个name是key,通过key找到所对应的value、比如说表单域,文件的表单域肯定是个文件就代表了那个key。
        MultipartBuilder multipartBuilder=new MultipartBuilder();
        RequestBody requestBody= multipartBuilder.type(MultipartBuilder.FORM)
                .addFormDataPart("username","hyman")
                .addFormDataPart("password","123")
                .addFormDataPart("mPhoto","hyman.jpg",RequestBody.create(MediaType.parse("application/octet-stream"),file))
                .build();
        //mime type
        Request.Builder builder=new Request.Builder();
        Request request= builder.url(mBaseUrl+"uploadInfo").post(requestBody).build();
        //3  4
        executeRequest(request);
    }
    <Button
        android:id="@+id/button_doUpload"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="doUpload"
        android:text="Upload" />
    

    public class UserAction extends ActionSupport{
        private String username;
        private String password;
       public File mPhoto;//必须和AS的那个key是一模一样的.可以指定fileName和contentType
        public String mPhotoFileName;
        public String mPhotoContentType;//没有它会有警告。
        
        public String uploadInfo() throws IOException{
            System.out.println(username+","+password);
            if (mPhoto==null) {
                System.out.print(mPhotoFileName+"is null");
            }
            String dir=ServletActionContext.getServletContext().getRealPath("files");
            File file=new File(dir,mPhotoFileName);
            FileUtils.copyFile(mPhoto,file);
            return  null;

        }

    }

     <action name="uploadInfo" class="com.imooc.action.UserAction" method="uploadInfo">
      </action>

    结果是:点击Upload按钮,服务器端出现一张图片,图片命名为hyman.jpg ,同时我们拿到username,password。

     

    post下载文件:

     

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

    千次阅读 2017-01-18 21:34:04
    其中 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 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:


    1.第一种 application/x-www-form-urlencode

    这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样:

    BASHPOST 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 转码。


    2.第二种multipart/formdata

    这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data。

    这种数据提交方式主要用来上传文件的。

    3.第三种application/json

    让前端在content-type 设置为application/json,然后提交参数用JSON.stringify将JS对象序列化。

    后端在spring中可以用@RequestBody 注解,这样直接可以将参数反序列化到对象中。这种方式在RestFul接口用的多,用Json提交的有个好处是可以处理非常复杂的数据机构。如果按照第一种键值对的方式提交,工作量较大。

    坑:单个变量String的时候,不能直接接受(默认是转成map的)。报错:

    org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
     at [Source: java.io.PushbackInputStream@4b55110; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
     at [Source: java.io.PushbackInputStream@4b55110; line: 1, column: 1]
    解决:

    需要用非基础类型对象接收。

    4.第四种text/xml

    用的不多。

    展开全文
  • Get和Post方法的异同

    2019-07-11 20:03:08
    1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;...
    一、区别与应用: Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下: 1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。 3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。 4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。 5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。 6、Get是Form的默认方法 二、从HTML中发送数据,在ASP中如何接收? 在form表单的action属性值里面有一个相对路径指向asp文件。就是用这个asp文件来接收和处理的。

    转载于:https://www.cnblogs.com/acoll/articles/2600505.html

    展开全文
  • 直接使用POST方法登录网站

    万次阅读 2016-02-03 11:19:11
    浏览器在 POST 数据之后能够自动登录,那么我能不能在代码中直接模拟这个过程呢? 于是我设定了这样的一个流程 1. 设置浏览器的 headers, 设置请求等 2. 使用 httpfox 工具获取post data 3. 将post data 写下来...
  • 采用httpClient通过post方式发送json数据时遇到响应是乱码的问题,返回的响应中文部分是乱码,发送端原代码如下: public static void sendJsonByPost() throws Exception { CloseableHttpClient httpClient = ...
  • Post,Get请求乱码的原因和解决方案

    万次阅读 2018-09-16 18:19:23
    阅读须知: 在每个页面的开头处,都会有一行: &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;...UT...
  • 对于做Java WEB项目同学来说,中文乱码问题是一个经常遇到而又非常头痛的问题,而最容易出现乱码的环节就是在浏览器向服务器发送请求的过程,至于出现乱码的原因不是本文的关注的重点,想了解的朋友可以参考 ...
  • POST请求放在请求体中,而GET请求在浏览器的地址栏中) POST请求乱码问题: 假设这样的场景:在浏览器中有一个表单,我们在表单中输入了中文汉字,在Servlet中的doPost中,我们尝试获取这个参数并进行打印,在...
  • 使用curl 命令模拟POST/GET请求

    万次阅读 2017-05-09 11:43:10
    curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。 在进行web后台程序开发测试过程中,常常会需要发送url进行测试...
  • $.post()与后台的参数传递

    万次阅读 2019-01-15 10:34:56
    在django练习中,前端使用js和后台进行数据交互,使用的是ajax中的post方法,但发现参数无法传递到后台,错误显示csrf问题,post请求中都会出现的问题。在模板中直接加上{% csrf_token %},但还是不行。 原因 模板...
  • httppost的用法

    万次阅读 2018-05-16 17:02:38
    (一)案例一定义了一个list,该list的数据类型是NameValuePair(简单名称值对节点类型),这个代码多处用于Java像url发送Post请求。在发送post请求时用该list来存放参数。发送请求的大致过程如下:String url="...
  • 模拟POST、Get 请求的工具----APIpost(中文版POSTMAN) 快速生成、一键导出api文档 在线模拟调试,结果实时返回 模拟登录后请求API 支持团队协作 官网:https://www.apipost.cn/  ...
  • CURL 发送POST请求

    万次阅读 2019-07-02 16:28:05
    CURL 发送POST请求 curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://192.168.0.1:8001/test" 参数 内容 -H 请求头 -d...
  • Postman发送post请求

    万次阅读 多人点赞 2018-06-01 12:38:03
    Postman发送post请求在服务器开发过程中,要经常对get,post接口进行测试,get请求,浏览器就可以完成,而post请求浏览器用起来有点麻烦,有的浏览器支持的不太好,个人用过火狐,还可以,今天介绍一下Postman发送...
  • 使用chrome post方法发送数据

    万次阅读 2018-02-17 11:50:48
    使用chrome post方法发送数据 使用插件postman和客户端 一开始以为还需要安装客户端,臃肿不好用,但是上手简单一试,发现还是可以,不仅仅可以用来调试网页应用程序,用来测试网站的接口,看json数据,测试爬虫...
  • 浏览器模拟发送post请求

    万次阅读 2017-10-23 17:05:53
    需求:有时候提供接口API给别的模块使用,为了模拟测试,需要发送post请求来测试。 解决办法: 1.可以自己写代码,发送post请求,但是对于入参仅仅是个int等基本类型或者String,那么就不用大费周章,浏览器插件...
  • @RequestMapping(value = "/userInfo", method = {RequestMethod.POST,RequestMethod.GET})
  • JS实现使用POST方式发送请求

    万次阅读 2017-05-18 15:37:58
    window.location.href是我们常用来在js中实现页面跳转的方法,这是使用get方式发送请求,示例如下window....下面我们来讲下如何通过POST请求实现页面跳转。//发送POST请求跳转到指定页面 function httpPost(URL,
  • Unity3D 2018版本 Post Process 使用介绍

    万次阅读 2018-05-07 14:09:00
    2018版本要在Camera 上添加 Post Process Layer.cs脚本(如果想让相机起作用,这个是必须添加)、Post Process Volume.cs 脚本Post Process Layer:控制相机特效渲染图层Post Process Volume:相机...
1 2 3 4 5 ... 20
收藏数 1,921,647
精华内容 768,658
关键字:

post