精华内容
下载资源
问答
  • 向后台发送post请求,根据需要发送多个键值对,获取返回的json字符串
  • C# 使用Get和Post请求获取数据

    热门讨论 2015-07-30 09:56:17
    C# 使用Get或Post请求获取数据 并解析获取到的Json数据
  • Method - Post请求 - 请求/接收参数方式

    千次阅读 2019-07-28 12:23:15
    因为web开发,经常要写接口,前后端需要接口联调,所以必须前后端要清楚请求的方式,而且还必须结合具体的场景选择合适的请求方式,已经传递参数的方式,比如post请求,参数传递的方式也有些许不同,总结如下↓ ...

    1.背景介绍

    因为web开发,经常要写接口,前后端需要接口联调,所以必须前后端要清楚请求的方式,而且还必须结合具体的场景选择合适的请求方式,已经传递参数的方式,比如post请求,参数传递的方式也有些许不同,总结如下↓

     

    后端语言:PHP 5.x  与 NodeJs 12.16.2

    2.常用到参数传递内容类型 [即$_SERVER[CONTENT_TYPE]的值不同]

    Note:

    Method - Get请求 - 传递参数参见: https://blog.csdn.net/william_n/article/details/96486428

    HTTP - GET 通过 Body 来发送数据 - 学习/实践:  https://blog.csdn.net/william_n/article/details/107941285

     

    json/application   //$_SERVER[CONTENT_TYPE] 为 "application/json" ,有时为"application/json; charset=UTF-8"应该打印确认方可,尽量使用stripos函数进行判断

    form-data  //$_SERVER[CONTENT_TYPE]为"multipart/form-data"

    x-www-form-urlencoded  //$_SERVER[CONTENT_TYPE] 为 "application/x-www-form-urlencoded"

     

    备注:

    get请求方式,是接收不到$_SERVER[CONTENT_TYPE]的,

    同时post仅仅以查询字符串的方式 [即可以认为也是get方式】传递参数也是没有接收不到$_SERVER[CONTENT_TYPE]的]

    postman post请求,如果选择none,默认即 "application/x-www-form-urlencoded" [也是ajax的默认请求内容类型]

    3.接口测试工具

    Postman // 下载/安装/使用 见https://blog.csdn.net/william_n/article/details/91045285

    4.json/application

    简单介绍:

    并不是只有后端可以返回给前端json数据,同时,前端也是可以向后端传递json格式的数据

    [前后端都是进行json格式的自由传递和传唤,json本质上就是一串字符串,在网络中可以被转换为二进制传输 即字节[bite]流]

     

    在postman中使用如下:

     

    后端接收:

    $data = file_get_contents('php://input'); //接受参数的结果是数组

    $source = $data['__source__'];//获取参数  [本地开发环境测试,一直接收不到,原因在确定]

     

    原因:

    php 7.2.10不支持,改成5.x即可

     

    postman中接收如下:

     

    后端接收方式有二: [推荐使用第二种方式]

    <?php
    $data = json_decode($GLOBALS['HTTP_RAW_POST_DATA'] ,true);
    var_dump($data);

     

    $data1 = json_decode(file_get_contents("php://input") ,true);
    var_dump($data1);

     

    额外补充

    1.PHP接收JSON格式的数据
    在API服务中,目前流行采用json形式来交互。

    给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据。

    接收前端提交的json数据稍微复杂一点,原因是:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

     

    因此,对 型如text/xml 或者 soap 或者 application/octet-stream 和 application/json 格式之类的内容无法解析,如果用$_POST数组来接收就会失败!

    此时可以使用$GLOBALS['HTTP_RAW_POST_DATA']  或  file_get_contents('php://input') 来获取提交的数据

     
    查看手册,可以发现$GLOBALS['HTTP_RAW_POST_DATA']  和  $_POST的区别:
      $_POST:通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。
      $GLOBALS['HTTP_RAW_POST_DATA'] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。

    此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于enctype="multipart/form-data" 表单数据不可用。

     

    也就是说

     

    基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']来接收,比如 text/xml 或者 soap 等等。

     

    补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。

     

    2.php://input

    php://input 是个可以访问请求的原始数据的只读流 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。 而且,这样的情况下 $HTTP_RAW_POST_DATA 默认没有填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。 enctype="multipart/form-data" 的时候 php://input 是无效的。

     

    Note:

    在 PHP 5.6 之前 php://input 打开的数据流只能读取一次; 数据流不支持 seek 操作。 不过,依赖于 SAPI 的实现,请求体数据被保存的时候, 它可以打开另一个 php://input 数据流并重新读取。 通常情况下,这种情况只是针对 POST 请求,而不是其他请求方式,比如 PUT 或者 PROPFIND。[不甚理解??]

     

    php://output
    php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。

    5. form-data

    简单介绍:

    即form表单提交方式, 但是请求头的content-type=multipart/form-data.

    如果用html来写即:

    <form action="/signin" method="post" enctype="multipart/form-data">

        <p>Name: <input name="name" value="koa"></p>

        <p>Password: <input name="password" type="password"></p>

        <p><input type="submit" value="Submit"></p>

    </form>

    postman中即键值对,键的类型只能为text和file, 可以根据需要选择

     

     

    PHP:

    后端接受:$data = $_POST; var_dump($data); exit;

    本质上$_POST全局变量接收,请结合具体的框架而定,即使用变体形式来接收参数.

     

    如: PHP原生code

    form表单中, 不论是否设置enctype="muiltpart/form-data"

    即,是否设置请求头中Content-Type: multipart/form-data; 或者 Content-Type: application/x-www-form-urlencoded;

    都是可以使用$_POST进行接收的.

     

    Content-Type: multipart/form-data;

     

    Content-Type: application/x-www-form-urlencoded;

    code:

    index.php

    post.php

     

    如:YII2.0中

    $request = Yii::$app->request;

    $post = $request->post(); // 等价于: $post = $_POST;

     

    如:laravel5.0中 [注意不是5.0以后的版本, 更高版本具体而定,也应该更容易]

     public function store(Request $request)//服务注入的方式
        {
            $name=$request->input('name');

             //可能需要$name=$request->get('name');//这里的get并不是代表get请求方式,而是获取的意思

             //或者 $name=$request->all(); 等价于: $post = $_POST;
        }

     

    如:thinkphp5.0

    $request = Request::instance(); //或者助手函数 $request = request();

    $request->param('name');// 获取当前请求的name变量

     

    未使用框架,则直接使用$_POST接收即可,但要做安全处理.

    postman中如下:

     

     

    [post form-data 参数传递数组]

     

    NodeJs:

    使用koa-bodyparser中间件中的

    ctx.request.body 是接收不到数据的

    原因:TBD  

    解决:TBD  暂时先改成 application/x-www-form-urlencoded 即form表单中去掉 enctype="multipart/form-data" 即可。

    详见下方

    6.x-www-form-urlencoded [即ajax默认的请求方式, 也是form表单的默认content-type]

    就是键值对,值可以为整形,字符串,布尔型,还可以是json

    postman中如下:

    后端接收如下:

    $data = $_POST;
    var_dump($data);
    $source = json_decode($data['data'],true);
    var_dump($source);
    exit;

    7.问题

    1.nodeJs提供后端api,  form表单填写username+password登录,

    浏览器中正常请求响应.

    postman中使用form-data类型, 后端api不能接受到参数

    改成x-www-form-urlencoded 类型, 正常请求响应.

     

    截图:

    浏览器

    填写表单请求, 正常响应

    Postman:

    后端NodeJs code

     

    原因: form表单中如果不设置enctype默认即x-www-form-urlencoded

    登录页面的表单, 请求类型为[在浏览器中]x-www-form-urlencoded, 所以Postman中Content-Type也要为该类型方可.

     

    问题:

    谁来设置的表单请求的Content-Type?

    程序员来设置form表单中的enctype属性. 见 5. form-data

     

     

    补充:

    Laravel 7.x中获取请求参数的方式, 如下:

     

    ...

    8.参考

    yii官网文档 :https://www.yiichina.com/doc/guide/2.0/runtime-requests

    laravel学院文档  :  https://laravelacademy.org/post/68.html

    thinkPHP官方文档 : https://www.kancloud.cn/manual/thinkphp5/118044

    PHP接收JSON格式的数据 : https://www.cnblogs.com/cqingt/p/5853566.html 

    PHP接收JSON数据官方文档:https://php.net/manual/zh/wrappers.php.php

    contentType : 'application/json' not working for JSON String? [PHP] :https://stackoverflow.com/questions/25739625/contenttype-application-json-not-working-for-json-string-php

    https://segmentfault.com/a/1190000013056786 // Http请求中的Content-Type

    后续补充

    ...

     

    展开全文
  • CURL 发送POST请求

    千次阅读 2020-08-18 10:41:47
    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 POST内容 -X ...

    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 POST内容
    -X 请求协议

    简介
    curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。

    -A

    -A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]

     

    $ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

    上面命令将User-Agent改成 Chrome 浏览器。

     

    $ curl -A '' https://google.com

    上面命令会移除User-Agent标头。

    也可以通过-H参数直接指定标头,更改User-Agent

     

    $ curl -H 'User-Agent: php/1.0' https://google.com

    -b

    -b参数用来向服务器发送 Cookie。

     

    $ curl -b 'foo=bar' https://google.com

    上面命令会生成一个标头Cookie: foo=bar,向服务器发送一个名为foo、值为bar的 Cookie。

     

    $ curl -b 'foo1=bar;foo2=bar2' https://google.com

    上面命令发送两个 Cookie。

     

    $ curl -b cookies.txt https://www.google.com

    上面命令读取本地文件cookies.txt,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器。

    -c

    -c参数将服务器设置的 Cookie 写入一个文件。

     

    $ curl -c cookies.txt https://www.google.com

    上面命令将服务器的 HTTP 回应所设置 Cookie 写入文本文件cookies.txt

    -d

    -d参数用于发送 POST 请求的数据体。

     

    $ curl -d'login=emma&password=123'-X POST https://google.com/login # 或者 $ curl -d 'login=emma' -d 'password=123' -X POST https://google.com/login

    使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST

    -d参数可以读取本地文本文件的数据,向服务器发送。

     

    $ curl -d '@data.txt' https://google.com/login

    上面命令读取data.txt文件的内容,作为数据体向服务器发送。

    --data-urlencode

    --data-urlencode参数等同于-d,发送 POST 请求的数据体,区别在于会自动将发送的数据进行 URL 编码。

     

    $ curl --data-urlencode 'comment=hello world' https://google.com/login

    上面代码中,发送的数据hello world之间有一个空格,需要进行 URL 编码。

    -e

    -e参数用来设置 HTTP 的标头Referer,表示请求的来源。

     

    curl -e 'https://google.com?q=example' https://www.example.com

    上面命令将Referer标头设为https://google.com?q=example

    -H参数可以通过直接添加标头Referer,达到同样效果。

     

    curl -H 'Referer: https://google.com?q=example' https://www.example.com

    -F

    -F参数用来向服务器上传二进制文件。

     

    $ curl -F 'file=@photo.png' https://google.com/profile

    上面命令会给 HTTP 请求加上标头Content-Type: multipart/form-data,然后将文件photo.png作为file字段上传。

    -F参数可以指定 MIME 类型。

     

    $ curl -F 'file=@photo.png;type=image/png' https://google.com/profile

    上面命令指定 MIME 类型为image/png,否则 curl 会把 MIME 类型设为application/octet-stream

    -F参数也可以指定文件名。

     

    $ curl -F 'file=@photo.png;filename=me.png' https://google.com/profile

    上面命令中,原始文件名为photo.png,但是服务器接收到的文件名为me.png

    -G

    -G参数用来构造 URL 的查询字符串。

     

    $ curl -G -d 'q=kitties' -d 'count=20' https://google.com/search

    上面命令会发出一个 GET 请求,实际请求的 URL 为https://google.com/search?q=kitties&count=20。如果省略--G,会发出一个 POST 请求。

    如果数据需要 URL 编码,可以结合--data--urlencode参数。

     

    $ curl -G --data-urlencode 'comment=hello world' https://www.example.com

    -H

    -H参数添加 HTTP 请求的标头。

     

    $ curl -H 'Accept-Language: en-US' https://google.com

    上面命令添加 HTTP 标头Accept-Language: en-US

     

    $ curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com

    上面命令添加两个 HTTP 标头。

     

    $ curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

    上面命令添加 HTTP 请求的标头是Content-Type: application/json,然后用-d参数发送 JSON 数据。

    -i

    -i参数打印出服务器回应的 HTTP 标头。

     

    $ curl -i https://www.example.com

    上面命令收到服务器回应后,先输出服务器回应的标头,然后空一行,再输出网页的源码。

    -I

    -I参数向服务器发出 HEAD 请求,然会将服务器返回的 HTTP 标头打印出来。

     

    $ curl -I https://www.example.com

    上面命令输出服务器对 HEAD 请求的回应。

    --head参数等同于-I

     

    $ curl --head https://www.example.com

    -k

    -k参数指定跳过 SSL 检测。

     

    $ curl -k https://www.example.com

    上面命令不会检查服务器的 SSL 证书是否正确。

    -L

    -L参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。

     

    $ curl -L -d 'tweet=hi' https://api.twitter.com/tweet

    --limit-rate

    --limit-rate用来限制 HTTP 请求和回应的带宽,模拟慢网速的环境。

     

    $ curl --limit-rate 200k https://google.com

    上面命令将带宽限制在每秒 200K 字节。

    -o

    -o参数将服务器的回应保存成文件,等同于wget命令。

     

    $ curl -o example.html https://www.example.com

    上面命令将www.example.com保存成example.html

    -O

    -O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

     

    $ curl -O https://www.example.com/foo/bar.html

    上面命令将服务器回应保存成文件,文件名为bar.html

    -s

    -s参数将不输出错误和进度信息。

     

    $ curl -s https://www.example.com

    上面命令一旦发生错误,不会显示错误信息。不发生错误的话,会正常显示运行结果。

    如果想让 curl 不产生任何输出,可以使用下面的命令。

     

    $ curl -s -o /dev/null https://google.com

    -S

    -S参数指定只输出错误信息,通常与-s一起使用。

     

    $ curl -s -o /dev/null https://google.com

    上面命令没有任何输出,除非发生错误。

    -u

    -u参数用来设置服务器认证的用户名和密码。

     

    $ curl -u 'bob:12345' https://google.com/login

    上面命令设置用户名为bob,密码为12345,然后将其转为 HTTP 标头Authorization: Basic Ym9iOjEyMzQ1

    curl 能够识别 URL 里面的用户名和密码。

     

    $ curl https://bob:12345@google.com/login

    上面命令能够识别 URL 里面的用户名和密码,将其转为上个例子里面的 HTTP 标头。

     

    $ curl -u 'bob' https://google.com/login

    上面命令只设置了用户名,执行后,curl 会提示用户输入密码。

    -v

    -v参数输出通信的整个过程,用于调试。

     

    $ curl -v https://www.example.com

    --trace参数也可以用于调试,还会输出原始的二进制数据。

     

    $ curl --trace - https://www.example.com

    -x

    -x参数指定 HTTP 请求的代理。

     

    $ curl -x socks5://james:cats@myproxy.com:8080 https://www.example.com

    上面命令指定 HTTP 请求通过myproxy.com:8080的 socks5 代理发出。

    如果没有指定代理协议,默认为 HTTP。

     

    $ curl -x james:cats@myproxy.com:8080 https://www.example.com

    上面命令中,请求的代理使用 HTTP 协议。

    -X

    -X参数指定 HTTP 请求的方法。

     

    $ curl -X POST https://www.example.com

    上面命令对https://www.example.com发出 POST 请求。

    参考链接

    展开全文
  • get请求和post请求的详细区别

    万次阅读 多人点赞 2019-06-06 16:29:40
    ...你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻...

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

     

    最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

     

    你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

     

    当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

     

    你轻轻松松的给出了一个“标准答案”:
     

    • GET在浏览器回退时是无害的,而POST会再次提交请求。

       

    • GET产生的URL地址可以被Bookmark,而POST不可以。

       

    • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

       

    • GET请求只能进行url编码,而POST支持多种编码方式。

       

    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

       

    • GET请求在URL中传送的参数是有长度限制的,而POST么有。

       

    • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

       

    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

       

    • GET参数通过URL传递,POST放在Request body中。

    (本标准答案参考自w3schools)

     

    “很遗憾,这不是我们要的回答!”

     

    请告诉我真相。。。

     

    如果我告诉你GET和POST本质上没有区别你信吗? 


    让我们扒下GET和POST的外衣,坦诚相见吧!


    GET和POST是什么?HTTP协议中的两种发送请求的方法。

     

    HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

     

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

     

    那么,“标准答案”里的那些区别是怎么回事?

     

     

     

    在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

     

    但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里关于参数大小的限制又是从哪来的呢?

     


     

    在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

     

    好了,现在你知道,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 

     

    你以为本文就这么结束了?

     

    我们的大BOSS还等着出场呢。。。

     

    这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜索结果里,从没有提到他。他究竟是什么呢。。。

     

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

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

     

    长的说:

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

     

    也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

     

    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

     

    现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?

     

    结束!!!

    原文:https://www.cnblogs.com/logsharing/p/8448446.html

    想了解更多java基础知识,关注个人微信公众号:小周只会基础

    (公众号是新申请的,有问题留言就行,后期有时间会完善公众号)

    展开全文
  • Post请求的四种方式

    千次阅读 2019-08-29 00:13:25
    Post请求四种传送方式的Python实现 HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。常见的四种编码方式如下: ♦1、application/x-...

    Post请求四种传送方式的Python实现

    HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。常见的四种编码方式如下:

    ♦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
    

    ​ ♦2、multipart/form-data

    除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data。
      这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 form 的 enctyped 等于这个值,下面是示例

    接下来我们就来说一下post请求四种传送正文方式:

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

    ♦4、text/xml
      它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。

    post请求四种传送正文方式:

    (1)请求正文是application/x-www-form-urlencoded

    (2)请求正文是multipart/form-data

    (3)请求正文是raw

    (4)请求正文是binary

    (1)请求正文是application/x-www-form-urlencoded

    形式:

    1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'application/x-www-form-urlencoded'})
    

    ♦Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。

    输入:

    url = 'http://httpbin.org/post'
    d = {'key1': 'value1', 'key2': 'value2'}
    r = requests.post(url, data=d)
    print r.text
    

    输出:

    { 
    “args”: {}, 
    “data”: “”, 
    “files”: {}, 
    “form”: { 
    “key1”: “value1”, 
    “key2”: “value2” 
    }, 
    “headers”: { 
    …… 
    “Content-Type”: “application/x-www-form-urlencoded”, 
    …… 
    }, 
    “json”: null, 
    …… 
    }
    

    ♦可以看到,请求头中的Content-Type字段已设置为application/x-www-form-urlencoded,且d = {'key1': 'value1', 'key2': 'value2'}以form表单的形式提交到服务端,服务端返回的form字段即是提交的数据。

    (2)请求正文是multipart/form-data

    除了传统的application/x-www-form-urlencoded表单,我们另一个经常用到的是上传文件用的表单,这种表单的类型为multipart/form-data。

    形式:

    1 requests.post(url='',data={'key1':'value1','key2':'value2'},headers={'Content-Type':'multipart/form-data'})
    
    ♦发送文件中的数据需要(安装requests_toolbelt)
    
    from requests_toolbelt import MultipartEncoder
    import requests
    
    m = MultipartEncoder(
        fields={'field0': 'value', 'field1': 'value',
                'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
        )
    
    r = requests.post('http://httpbin.org/post', data=m,
                      headers={'Content-Type': m.content_type})
    

    ​ ♦不需要文件

    from requests_toolbelt import MultipartEncoder
    import requests
    
    m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})
    
    r = requests.post('http://httpbin.org/post', data=m,
                      headers={'Content-Type': m.content_type})
    

    (3)请求正文是raw

    形式:

    ♦传入xml格式文本
    1 requests.post(url='',data='<?xml  ?>',headers={'Content-Type':'text/xml'})
    ♦传入json格式文本
    1 requests.post(url='',data=json.dumps({'key1':'value1','key2':'value2'}),headers={'Content-Type':'application/json'})
    

    或者:

    1  requests.post(url='',json={{'key1':'value1','key2':'value2'}},headers={'Content-Type':'application/json'})
    

    ♦可以将一json串传给requests.post()的data参数,

    输入:

    url = 'http://httpbin.org/post'
    s = json.dumps({'key1': 'value1', 'key2': 'value2'})
    r = requests.post(url, data=s)
    print r.text
    

    输出:

    { 
    “args”: {}, 
    “data”:{\”key2\”: \”value2\”, \”key1\”: \”value1\”}, 
    “files”: {}, 
    “form”: {}, 
    “headers”: { 
    …… 
    “Content-Type”: “application/json”, 
    …… 
    }, 
    “json”: { 
    “key1”: “value1”, 
    “key2”: “value2” 
    }, 
    …… 
    }
    

    (4)请求正文是binary

    形式:

    1 requests.post(url='',files={'file':open('test.xls','rb')},headers={'Content-Type':'binary'})
    

    ♦Requests也支持以multipart形式发送post请求,只需将一文件传给requests.post()的files参数即可。

    输入:

    url = 'http://httpbin.org/post'
    files = {'file': open('report.txt', 'rb')}
    r = requests.post(url, files=files)
    print r.text
    

    输出:

    { 
    “args”: {}, 
    “data”: “”, 
    “files”: {file: “Hello world!” 
    }, 
    “form”: {}, 
    “headers”: {…… 
    “Content-Type”: “multipart/form-data; boundary=467e443f4c3d403c8559e2ebd009bf4a, 
    …… 
    }, 
    “json”: null, 
    …… 
    }
    

    ♦文本文件report.txt的内容只有一行:Hello world!,从请求的响应结果可以看到数据已上传到服务端中。

    注意:一定要注意headers的类型。

    展开全文
  • 在Http请求里post是其中比较常用的提交数据的请求方式,...Post请求包含两部分:请求头(header)和请求体(body)。 Post常见的请求体(body)有三种传输内容类型Content-type:application/x-www-form-urlenco...
  • python post 请求

    千次阅读 2018-08-10 11:16:35
    python接口自动化2-发送post请求 &lt;div class="postBody"&gt; &lt;div id="cnblogs_post_body" class="blogpost-body"&gt;&lt;p&gt;前言&lt;/p...
  • java中main方法发送httpPost请求

    热门讨论 2013-10-29 13:44:03
    java语言后台请求网站操作 java中main方法发送httpPost请求
  • C# http Get/POST请求封装类

    热门讨论 2014-08-29 16:34:40
    C# http Get/POST请求封装类
  • 1. 前言接口参数应该怎么传递是每个项目应该面对的问题,这跟编程语言无关,今天来总结一波常用的接口参数传递方式。2. GET 请求GET 请求一般用来向服务器请求获取数据。总体来说目前有...
  • Post请求基本步骤

    万次阅读 2018-04-26 11:41:42
    接着我的博客前后端交互来,使用Post请求完成操作。 get方法从服务器获取数据。post方法向服务器提交数据。 public class MainActivity extends AppCompatActivity { OkHttpClient okHttpClient=new ...
  • Java发送get/post请求,获取响应结果,这是一个常见操作。为此封装一个Java类,做发送GET/POST请求,然后解析返回参数。
  • JAVA发送POST请求

    万次阅读 2018-09-28 14:36:39
    java向第三方发送post请求,数据格式为json。废话不多说,直接上代码 import com.alibaba.fastjson.JSON; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods....
  • 其实下载没什么要特别说的,之前都是用的get请求,这次不同,后台用的post请求,返回的是数据流,这种post请求下载文件的方式倒是没怎么弄过。记录一下。 接口 接口地址为: /file/download/${id} 前端请求这里...
  • SpringBoot使用RestTemplate发送Post请求

    万次阅读 多人点赞 2018-07-05 14:50:48
    Spring中有个RestTemplate类用来发送HTTP请求很方便,本文分享一个SpringBoot发送POST请求并接收返回数据的例子。背景:用户信息放在8081端口的这个服务器上,8082端口服务器上的应用通过调用api,传递参数,从8081...
  • GO接收GET/POST参数以及发送GET/POST请求 go作为21世纪的新C语言,还是应该学习一下的,本文主要介绍net/http包相关用法 GO发送HTTP请求 发送GET请求 直接放代码 //简易快速版 func Get1(url string) { rsp, ...
  • Get请求和Post请求的区别

    千次阅读 2020-02-21 21:58:39
    1)请求形式 ①Get举例子来说吧: url : “http://www.imooc.com?a=1&b=2&c=3” 这个地址,问号之后的称为参数。我们可以看出:有3个参数,a,b,c.它们的值分别是1,2,3你已经想到了,&就是“和”的意思...
  • GET,POST请求区别

    千次阅读 2020-07-13 19:49:54
    所以本质上来说GET和POST请求是没有区别 的,都是TCP链接。他们能做的事情是一样的。 HTTP协议既然有了这两个方法,就是为了在特定的情况下区分应用。就有了我们所说的GET是获取数据,POST是提交数据的。 2. GET传输...
  • Python 使用requests发送POST请求总结

    万次阅读 2019-07-02 19:18:45
    版权声明:本文为博主原创文章,未经博主允许不得转载。... 一个http请求包括三个部分,为别为请求行,请求报头,...HTTP协议规定post提交的数据必须放在消息主体中,但是协议并没有规定必须使用什么编码方式。服务端通...
  • vue中post请求

    千次阅读 2019-07-09 11:16:34
    import qs from ‘qs’;...axios.post(url,qs.stringify({ // 通过qs.stringify()将对象解析成URL的形式 name:'0', age:'2' }),{emulateJSON: true},{ headers:{"Content-Type": "application/x-ww...
  • vue封装Axios的get、post请求

    千次阅读 多人点赞 2021-02-27 16:55:30
    现在来说说post请求常见的数据格式(content-type) Content-Type: application/json : 请求体中的数据会以json字符串的形式发送到后端,这种是axios默认的请求数据类型,我们只需将参数序列化json字符串进行传递...
  • 在本篇简短的技术文章中,我们将特别介绍 OkHttp 3.x 版本中发送Post请求的不同方式。 2 基本的 POST 请求d 我们可以使用 FormBody.Builder 构造基本的 RequestBody , 包含两个参数:用户名、密码,发送 POST请...
  • 使用HttpClient进行POST请求

    千次阅读 2019-04-17 14:31:59
    使用 httpclient 来进行post请求 */ public class HCPost { public static void main(String[] args) throws Exception { // 1.拿到一个httpclient的对象 CloseableHttpClient httpClient = HttpClients.create...
  • PHP 获取 HTTP POST 请求的四种方式

    万次阅读 2019-07-02 15:29:17
    一、HTTP POST请求常见的四种方式 (1)application/x-www-form-urlencoded (2)multipart/form-data (3)application/json (4)text/xml 二、PHP获取参数的方式 一、HTTP POST请求常见的四种方式 ...
  • 【Python】Http Post请求四种请求体的Python实现

    万次阅读 多人点赞 2019-08-02 13:55:49
    前言 前几天一个刚接触Python不...这里说的各类Post请求主要包含json格式、xml格式、文件上传(form-data)、及默认传递的urlencoded。 在开始介绍相关的Python用法之前,我们首先我们来了解一下HTTP的报文结构。 H...
  • post 请求下载文件

    千次阅读 2019-11-29 11:35:43
    最近遇到一个下载的需求,由于 url 参数太长(常用的下载方法 a 标签或者 location.href 的方法都是 get 请求,get 请求参数长度有限制),无法下载,考虑了好几种方案,最终还是觉得通过 ajax 的 POST 方法进行下载,...
  • 我用一个post请求到url传递参数,url接收参数多了个= ![图片说明](https://img-ask.csdn.net/upload/201812/23/1545578357_972036.png) ![图片说明]...
  • Nodejs 发送HTTP POST请求实例

    万次阅读 2019-03-25 09:19:36
    项目里面需要用到使用NodeJs来转发HTTP POST请求,研究了很久最后才弄通,把过程记录一下: 接收端代码很简单,就是回送body.address属性: [javascript]view plaincopy print? exports.sendEmail=function(req,...
  • SpringBoot - 获取 POST 请求参数详解

    千次阅读 2020-12-27 15:39:59
    本篇文章为了方便 使用 Postman进行 POST 请求 的测试 一、接收 Form 表单数据 1、基本的接收方法 (1)创建Controller接收form-data格式的POST数据,如下所示: @RestController public class BookController...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 953,290
精华内容 381,316
关键字:

post请求