PHP http_build_query 会将 boolean 类型的数据转换为 1 或 0,从网络上搜到的方法都是用引号括住 "true" 和 "false"。
stackoverflow
cnblogs
但是在 post 请求后端的时候会被类型检查干掉。
发现 http_build_query 会返回 string 类型,于是我手动拼接了一下如 "testbool=true",还是会被后端报类型错误。
post 方式有问题,get 方式没问题,Python 请求就都没问题,所以很郁闷,后端又不能随便改,来求助各位了!
http_build_query 默认使用 RFC1738 来对数据进行编码,这个 RFC 中没有强调对于布尔值应该如何编码,所以各个语言处理的方式可能存在一些差异,大部分的实现都是以将 Bool 转换为字符串的结果来作为最后的结果。而 php 中,将 bool 转换成字符串将得到 1 和 0 ,分别对应 true 和 false。
如果你需要将数据中的 bool 转成
"true"
和"false"
,那可以先使用array_walk_recursive
递归遍历数据,把里面的 bool 值转成你对应的"true"
和"false"
。那就应该询问接收端的处理方式,POST 接收时,如果是使用
x-www-form-urlencoded
(其使用 RFC3986,但是与 RFC1738 的明显差别在于对于空格的处理),那其应该是和前面的差不多的。如果是使用 JSON 这种格式,那就应该使用 JSON 数据或者直接发送,而不需要经过 http_build_query。
你可以把 Python 发送的请求抓包放出来,或者提供相关代码。