【问题标题】:PHP API Content-Type: application/json. Response empty dataPHP API 内容类型:应用程序/json。响应空数据
【发布时间】:2014-06-14 05:48:39
【问题描述】:
适用于:
- 从 Android 平台发送到 PHP(网络服务)
- 使用此
Content-Type: application/x-www-form-urlencoded 发送的请求标头
不适用于:
- 使用
Content-Type: application/json 发送的请求标头。没有收到任何数据
API 在同一平台上工作,但不在跨平台上:
- 网络到网络工作
- Android 到网络无法正常工作
在 PHP 中在顶部添加了两个标题:
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
【问题讨论】:
标签:
php
android
json
web-services
api
【解决方案1】:
如果你比较这两种内容类型 application/x-www-form-urlencoded 和 application/json 在“第一个适用于 PHP,第二个不适用”,那么你可能期望数据神奇地出现在 $ 中_POST 在这两种情况下。
这不会发生。 PHP 仅在给出第一个内容类型时才填充 $_POST(或者,application/multipart-form-data 可用于所有内容,尤其是文件上传)。
如果你想使用 application/json,那么你必须自己在 PHP 端实现一个解析器,它读取 HTTP 请求正文并根据你的喜好进行解析。
【解决方案2】:
在日志搜索后我找到了我的答案..
我们需要这个函数来获得来自跨平台(android 到 web)的 $_POST 响应
file_get_contents('php://input')
或者我们也可以使用这个函数来获取 $_POST 响应
$HTTP_RAW_POST_DATA
这里是获取响应的完整函数。
$data = urldecode(file_get_contents('php://input'));
echo $data;