你所不知道的 POST

你所不知道的 POST

0.说明

  1. 大叔 : 翔逼 我们要做一个微信公众号哦。我来教你大概的流程好不好?(开启装逼模式中 )

  2. 翔逼 :好啊,快讲快讲。(无限期待中 )

  3. 大叔 :你知道 application/x-www-form-urlencoded是什么嘛?

  4. 翔逼 :啊咧咧?

  5. 大叔 :你知道 php 怎么获得 raw?

  6. 翔逼 :啊咧咧?

  7. 大叔 :用下面这种方法来实现。

echo file_get_contents("php://input");

  1. 翔逼 :啊咧咧?

  2. 翔逼 :php://input是什么东西?

  3. 大叔 :嘿嘿,自己去了解吧。

1.无情浪子 POST

编故事

POST平常看起来人畜无害,但是有句话说的好。最可怕的不是鬼怪,而是人心(Content-Type)。POST在明面上,只有一个老婆叫做application/x-www-form-urlencoded,其实他一共有好几个伴侣。

  1. 键值妹:application/x-www-form-urlencoded

  2. 文件妹:multipart/form-data

  3. 多胞胎:raw

text/plain

  1. text/html

  2. text/xml

  3. application/json

  4. application/xml

  5. application/javascirpt

2.辨别真心 Content-Type

0.说明

我们想知道POST心里装着的人是谁怎么办呢,这次请出感情专家 postman 来帮忙。

1.application/x-www-form-urlencoded

截图
报文
POST  HTTP/1.1Host: 127.0.0.1Cache-Control: no-cachePostman-Token: 4f2704aa-81e6-be22-4c36-8787ba945a22Content-Type: application/x-www-form-urlencodedname=lionis&sex=man
服务端代码
输出
array(2) {  ["name"]=>  string(6) "lionis"  ["sex"]=>  string(3) "man"}
结论

application/x-www-form-urlencoded是常用的表单发包方式,普通的表单提交,默认都是通过这种方式。 对于PHP用$_POST获得键值对。

2.multipart/form-data

截图
报文
POST  HTTP/1.1Host: 127.0.0.1Cache-Control: no-cachePostman-Token: f7640c52-6667-b4e8-aee8-02b0e1656969Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="name"lionis----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="sex"man----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="avater"; filename=""Content-Type: ----WebKitFormBoundary7MA4YWxkTrZu0gW
服务端代码
输出
array(2) {  ["name"]=>  string(6) "lionis"  ["sex"]=>  string(3) "man"}array(1) {  ["avater"]=>  array(5) {    ["name"]=>    string(36) "0CD0A5235EDCDAAB4AFE05B25695E696.png"    ["type"]=>    string(9) "image/png"    ["tmp_name"]=>    string(45) "/Applications/XAMPP/xamppfiles/temp/phpeFfc9e"    ["error"]=>    int(0)    ["size"]=>    int(9485)  }}
结论

multipart/form-data 用在发送文件的POST包。对于PHP用$_FILE获取文件内容,用$_POST获得键值对。

3.row

截图
报文
POST  HTTP/1.1Host: 127.0.0.1Content-Type: application/jsonCache-Control: no-cachePostman-Token: 9e0c339b-a6b0-c534-5c62-63ef8dc887c4{    "user": "xieyuandong",    "sex": "man"}
服务端代码
输出
string(47) "{    "user": "xieyuandong",    "sex": "man"}"
结论

raw可以上传json,xml,文本等等。对于PHP用php://input获得内容。

3.$_POST vs php://input vs HTTP_RAW_POST_DATA

1.$_POST

可以获 Content-Type 为 application/x-www-form-urlencoded 或者 multipart/form-data 的请求。

2.HTTP_RAW_POST_DATA

$POST不能获取的方式,都会存储在HTTP_RAW_POST_DATA,用$GLOBALS['HTTP_RAW_POST_DATA'] 接收。给内存带来的压力较大,并且需要 php.ini 设置。

3.php://input

允许读取 POST 的原始数据。给内存带来的压力较小,并且不需要 php.ini 设置。不能用于 enctype="multipart/form-data"。

4.结论

在php 7中已经取消了HTTP_RAW_POST_DATA,我们平时使用$POST和php://input就好了。

关键字:http, post, php


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部