问一下,android为前端,php为后端的问题

taihao
  • 386

就是http协议的问题,本人是做后端的,现在和android程序员发现了一个问题,就是他说是已POST请求发送数据,但是我php要已json的数据类型去接收数据,但是我在网上看到的人很多都是$_POST[] 这样获取数据,
问题
1.真的要php已json的数据类型去接收数据 那么php的代码改怎么写
2.他们android是不是有办法Post请求发送数据是否可以加name 。就像我们web网站一样,有个name。

已用户名 username
密码 userpass 为例子 大家帮帮忙。谢谢

回复
阅读 3.4k
6 个回答
agui1989
  • 4.6k

php接收post的数据,一般用$_POST可以搞定,如果不行,就用file_get_contents("php://input");

他请求的数据统一用json格式,用PHP处理是很简单的,只需要使用json_decode()解析一下就变成php里的数组了。
用户名密码之类的变量都可以包装在json里。

1.建议使用下面代码

$c = file_get_contents('php://input');  //解析获取的二进制流 获取的数据格式是json
$j = json_decode($c, true); //解析json数据,加第二个参数true 是数组 不然是对象

2.必须可以添加

常规数据用$_POST,XML之类的用file_get_contents('php://input');
不要用$GLOBALS["HTTP_RAW_POST_DATA"],7.0废弃了。

就相当于raw

这个问题很好解决,首先post 请求参数有两种传参方式:

  1. form 表单提交

  2. json 格式提交

后端和android 端商量一个接收数据的方式就行了,没有作者说的那么复杂

楼主用的什么框架,如果用的laravel或者lumen的话直接Request::getContent()接,然后再json_decode()一下。如果要自己实现,可以参考laravel的实现方式:

public function getContent($asResource = false)
    {
        $currentContentIsResource = is_resource($this->content);
        if (PHP_VERSION_ID < 50600 && false === $this->content) {
            throw new \LogicException('getContent() can only be called once when using the resource return type and PHP below 5.6.');
        }

        if (true === $asResource) {
            if ($currentContentIsResource) {
                rewind($this->content);

                return $this->content;
            }

            // Content passed in parameter (test)
            if (is_string($this->content)) {
                $resource = fopen('php://temp', 'r+');
                fwrite($resource, $this->content);
                rewind($resource);

                return $resource;
            }

            $this->content = false;

            return fopen('php://input', 'rb');
        }

        if ($currentContentIsResource) {
            rewind($this->content);

            return stream_get_contents($this->content);
        }

        if (null === $this->content || false === $this->content) {
            $this->content = file_get_contents('php://input');
        }

        return $this->content;
    }
宣传栏