php - 如何将 PHP 与 JSON 类型标头连接起来
问题描述
这是我的 PHP 代码
<?php require_once '../includes/DbOperations.php'; $response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(isset($_POST['username']) and isset($_POST['password']) and isset($_POST['email']))
{
//operate the data further
$db = new DbOperations();
$result = $db->createUser($_POST['username'],$_POST['password'],$_POST['email']);
if($result == 1){
$response['error'] = false;
$response['message'] = "User registered successfully";
}elseif($result == 2){
$response['error'] = true;
$response['message'] = "Some error occurred please try again";
}elseif($result == 0){
$response['error'] = true;
$response['message'] = "It seems you are already registered, please choose a different email and username";
}
}else{
$response['error'] = true;
$response['message'] = "Required fields are missing";
}
}else{
$response['error'] = true;
$response['message'] = "Invalid Request";
}
echo json_encode($response);
?>
当我使用 JSON 类型标头时它不起作用
String jsonResult = null;
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("username", "33");
jsonObject.put("password", "33");
jsonObject.put("email", "33@gmail.com");
jsonResult = jsonObject.toString();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String HitURL = "http://192.xxx.xxx.xxx/Android/v1/registerUser.php";
MediaType MEDIA_PlainMT = MediaType.parse("text/plain; charset=utf-8");
Request request = new Request.Builder().url(HitURL).post(RequestBody.create(MEDIA_PlainMT, jsonResult)).build();
OkHttpClient client = new OkHttpClient();
try {
TLSSocketFactory tlsSocketFactory=new TLSSocketFactory();
if (tlsSocketFactory.getTrustManager()!=null) {
client = new OkHttpClient.Builder()
.sslSocketFactory(tlsSocketFactory, tlsSocketFactory.getTrustManager())
.build();
}
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(okhttp3.Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
} else {
String HitResponse = response.body().string();
Log.v("/CheckLog/", HitResponse);
}
}
});
结果
{"error":true,"message":"Required fields are missing"}
解决方案
您的服务器代码需要提交常规application/x-www-form-urlencoded
值(也称为常规 POST 表单提交),但您的客户端正在将您的数据编码为application/json
(JSON 对象)。应该是哪一个?客户端和服务器必须相互同意。
如果您想使用 JSON 作为数据编码标准,您的代码应如下所示:
<?php
require_once '../includes/DbOperations.php';
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
$raw_input = file_get_contents('php://input');
try {
$input = json_decode($raw_input, TRUE, 512, JSON_THROW_ON_ERROR);
if (isset($input['username']) and isset($input['password']) and isset($input['email']))
{
//operate the data further
$db = new DbOperations();
$result = $db->createUser($input['username'],$input['password'],$input['email']);
if($result == 1){
$response['error'] = false;
$response['message'] = "User registered successfully";
}elseif($result == 2){
$response['error'] = true;
$response['message'] = "Some error occurred please try again";
}elseif($result == 0){
$response['error'] = true;
$response['message'] = "It seems you are already registered, please choose a different email and username";
}
}else{
$response['error'] = true;
$response['message'] = "Required fields are missing";
}
} catch (Exception $e) {
$response['error'] = true;
$response['message'] = "Invalid Request: " . $e->getMessage();
}
}else{
$response['error'] = true;
$response['message'] = "Invalid Request";
}
echo json_encode($response);
推荐阅读
- python - 使用文件目录和变量
- c# - 在 C# 中使用 Countif 时如何修复错误“OleAut 报告类型不匹配”?
- javascript - 如果我设置标题 z-index 和位置,我的内容的高度将被吃掉
- bash - 排除具有相同名称结尾的目录
- c++ - 使用 mod_gsoap 部署服务时如何更改 Gsoap 中的肥皂上下文模式?
- c++ - 关于声明变量时内存分配的问题
- python - django 测试中的错误
- maven - Maven - 詹金斯管道不使用 pom
- python - ValueError:没有足够的值来解压(预期为 2,得到 1)当试图在 python 中解压 dict 以使用 pandas 进行数据标记时
- python - 在用户的计算机上执行 python 脚本(Web 应用程序)