本文目录一览:
- PHP里面有办法获取HTTP请求的body内容吗
- PHP中如何发送HTTP请求
- PHP微信支付开发,测试时扫描二维码提示原生支付url参数错误
- 你好 !! PHP如何实现微信支付 求指教 新手!说清楚一点
- 自定义的http协议,怎样读取body
PHP里面有办法获取HTTP请求的body内容吗
request的各项信息
在$_POST
、$_GET
、$_COOKIE
、$_SERVER
里都有
如果是body的HTML吗?
用JS来获得啊
然后再交给 PHP 也可以阿。
PHP中如何发送HTTP请求
看起来你的代码正确,不知道你有什么问题。
这个方法不错,但是最好用一个封装好的类。
比如http_client
之类的,网上这样的类挺多了,你可以搜索一下。
当然直接用socket也可以。
PHP微信支付开发,测试时扫描二维码提示原生支付url参数错误
您好:
Content-Type
取值为application/x-www-form-urlencoded
时,PHP会将HTTP请求body相应数据填入到$_POST
数组中,且数据是经过urldecode()
解析的结果(除了该Content-Type
,还有multipart/form-data
表示数据是表单数据)。php://input
数据,只要Content-Type
不为multipart/form-data
,那么php://input
数据与HTTP entity body部分数据是一致的。该部分数据的长度由Content-Length
指定。- 仅当
Content-Type
为application/x-www-form-urlencoded
且提交方法是POST时,$_POST
数据与php://input
数据才是“一致”的(打上引号,表示它们格式不一致,内容一致)。其他情况,它们都不一致。 php://input
读取不到$_GET
数据,是因为$_GET
数据作为query_path写在HTTP请求头部的PATH字段,而不是写在HTTP请求的body部分。- 这也帮助我们理解了,为什么xml_rpc服务端读取数据都是通过
file_get_contents('php://input', 'r')
,而不是从$_POST
中读取,正是因为xml_rpc数据规格是XML,它的Content-Type
是text/xml
。 php://input
碰到了multipart/form-data
,请查阅RFC1867对它的描述。multipart/form-data
也表示以POST方法提交表单数据,它还伴随了文件上传,所以会跟application/x-www-form-urlencoded
数据格式不一样。它会以一种更合理的、更高效的数据格式传递给服务端。当Content-Type
为multipart/form-data
的时候,即便HTTP请求body中存在数据,php://input
也为空,PHP此时不会把数据填入php://input
流。所以可以确定:php://input
不能用于读取enctype=multipart/form-data
数据。- 当
Content-Type
为application/x-www-form-urlencoded
时,php://input
和$_POST
数据是“一致”的;为其他Content-Type
时,它们数据是不一致的。因为只有在Content-Type
为application/x-www-form-urlencoded
或者为multipart/form-data
时,PHP才会将HTTP请求数据包中的body相应部分数据填入$_POST
全局变量中,其他情况PHP都忽略。而php://input
除了在数据类型为multipart/form-data
时为空外,其他情况都可能不为空。
你好 !! PHP如何实现微信支付 求指教 新手!说清楚一点
通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试。
从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了要取出POST数据外,还要取其它的数据。
这里首先涉及到一个关于php://input
与$_POST
取值的问题,简单列几点如下:
Content-Type
取值为application/x-www-form-urlencoded
时,PHP会将HTTP请求body相应数据填入到$_POST
数组中,且数据是经过urldecode()
解析的结果(除了该Content-Type
,还有multipart/form-data
表示数据是表单数据)。php://input
数据,只要Content-Type
不为multipart/form-data
,那么php://input
数据与HTTP entity body部分数据是一致的。该部分数据的长度由Content-Length
指定。- 仅当
Content-Type
为application/x-www-form-urlencoded
且提交方法是POST时,$_POST
数据与php://input
数据才是“一致”的(打上引号,表示它们格式不一致,内容一致)。其他情况,它们都不一致。 php://input
读取不到$_GET
数据,是因为$_GET
数据作为query_path写在HTTP请求头部的PATH字段,而不是写在HTTP请求的body部分。 帮助我们了解了为什么xml_rpc服务端读取数据都是通过file_get_contents('php://input', 'r')
。 而不是从$_POST
中读取,正是因为xml_rpc数据规格是XML,它的Content-Type
是text/xml
。php://input
碰到了multipart/form-data
,请查阅RFC1867对它的描述。multipart/form-data
也表示以POST方法提交表单数据,它还伴随了文件上传,所以会跟application/x-www-form-urlencoded
数据格式不一样。它会以一种更合理的、更高效的数据格式传递给服务端。当Content-Type
为multipart/form-data
的时候,即便HTTP请求body中存在数据,php://input
也为空,PHP此时不会把数据填入php://input
流。所以可以确定:php://input
不能用于读取enctype=multipart/form-data
数据。- 当
Content-Type
为application/x-www-form-urlencoded
时,php://input
和$_POST
数据是“一致”的;为其他Content-Type
时,它们数据是不一致的。因为只有在Content-Type
为application/x-www-form-urlencoded
或者为multipart/form-data
时,PHP才会将HTTP请求数据包中的body相应部分数据填入$_POST
全局变量中,其他情况PHP都忽略。而php://input
除了在数据类型为multipart/form-data
之外为空外,其他情况都可能不为空。 以上转述这么多文字的意思,就是说,得用到这两种方式来读取微信传过来的数据。
自定义的http协议,怎样读取body
HTTP响应大体上分为HTTP首部和HTTP主体(RFC2616文档叫body)。HTTP协议规定,HTTP首部字段和HTTP主体之间是以一个空行分割的,所以读取HTTP body就是判断这个空行。如何判断呢?HTTP首部是由一个个字段构成的,每一行是一个字段。一行字段是个什么意思呢:HTTP以\r\n
这两个字符(反斜杠没有实际含义,它是转义字符)为结束符,用结束符分割来表示一行。
因为\r\n
两个字符是一行的结束符,HTTP首部和主体之间又以一个空行来分割,所以当你编写的程序从接收的数据中首次检测到\r\n\r\n
四个字符时,就知道,从这四个字符的下一个字符开始就是HTTP body的内容了,而\r\n\r\n
的前面的内容都是HTTP首部。