$_POST 发送 POST 时变量为空
$_POST variable empty when send POST
我正在尝试使用 RestSharp
向我的 rest-api
发送一个 JSON
。本质上,我已经为 json:
创建了一个模型 class
public class LogPostData
{
public string LogMessage { get; set; }
public string LogStackTrace { get; set; }
public string LogUserId { get; set; }
public string LogUserIp { get; set; }
}
所以我这样执行请求:
var logPost = new LogPostData();
logPost.LogMessage = "log message"
logPost.LogStackTrace = "some content";
var post = JsonConvert.SerializeObject(logPost);
var client = new RestClient("url of rest api");
var request = new RestRequest("methodApi", Method.PUT);
request.RequestFormat = DataFormat.Json;
request.AddParameter("application/json; charset=utf-8", post, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json;
var response = client.Execute(request);
如您所见,我已经创建了对象 LogPostData
,然后使用 JsonConvert.SerializeObject
.
对其进行了序列化
我将 methodApi
作为参数传递给 json。
现在,在我休息的时候 api,我做了以下事情:
file_put_contents('debug.txt', serialize($_POST));
内容应该是我在 post
变量上用 RestSharp
发送的变量,而不是我得到: a:0:{}
为什么我的 $_POST
变量是空的?
这是您要发送的内容 (JSON):
header: encoding-type=application/json
body: {"param1":"I like horses", "param2":"they are cool"}
这是 PHP 在 POST 请求中使 $_POST 数组工作(表单提交)所需要的
header: encoding-type=application/x-www-form-urlencoded
body: param1=I%20like%20horses¶m2=they%20are%20cool
如果您对发送 json 感到满意,则需要妥善接收。
如果您想继续使用 PUT,请为其创建一个期望 JSON 的处理程序。 (基于 )
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data); //$data contains put fields
}
根据 PHP manual,$_POST
适用于 application/x-www-form-urlencoded
和 multipart/form-data
内容类型。您正在发送 JSON (application/json
)。由于 $_POST
是根据发布的表单数据创建的关联数组,并且您没有发布表单,因此它为空也就不足为奇了。
要从请求正文中获取原始 JSON,您需要使用 php://input
$json = file_get_contents('php://input');
要将 JSON 反序列化为对象,您可以使用 json_decode
。
$logPostData = json_decode($json);
如果你想把数据转换成像$_POST
这样的关联数组,你可以把true
作为第二个参数传进去:
$logPostData = json_decode($json, true);
我正在尝试使用 RestSharp
向我的 rest-api
发送一个 JSON
。本质上,我已经为 json:
public class LogPostData
{
public string LogMessage { get; set; }
public string LogStackTrace { get; set; }
public string LogUserId { get; set; }
public string LogUserIp { get; set; }
}
所以我这样执行请求:
var logPost = new LogPostData();
logPost.LogMessage = "log message"
logPost.LogStackTrace = "some content";
var post = JsonConvert.SerializeObject(logPost);
var client = new RestClient("url of rest api");
var request = new RestRequest("methodApi", Method.PUT);
request.RequestFormat = DataFormat.Json;
request.AddParameter("application/json; charset=utf-8", post, ParameterType.RequestBody);
request.RequestFormat = DataFormat.Json;
var response = client.Execute(request);
如您所见,我已经创建了对象 LogPostData
,然后使用 JsonConvert.SerializeObject
.
我将 methodApi
作为参数传递给 json。
现在,在我休息的时候 api,我做了以下事情:
file_put_contents('debug.txt', serialize($_POST));
内容应该是我在 post
变量上用 RestSharp
发送的变量,而不是我得到: a:0:{}
为什么我的 $_POST
变量是空的?
这是您要发送的内容 (JSON):
header: encoding-type=application/json
body: {"param1":"I like horses", "param2":"they are cool"}
这是 PHP 在 POST 请求中使 $_POST 数组工作(表单提交)所需要的
header: encoding-type=application/x-www-form-urlencoded
body: param1=I%20like%20horses¶m2=they%20are%20cool
如果您对发送 json 感到满意,则需要妥善接收。
如果您想继续使用 PUT,请为其创建一个期望 JSON 的处理程序。 (基于
$method = $_SERVER['REQUEST_METHOD'];
if ('PUT' === $method) {
$data = json_decode(file_get_contents('php://input'), true);
var_dump($data); //$data contains put fields
}
根据 PHP manual,$_POST
适用于 application/x-www-form-urlencoded
和 multipart/form-data
内容类型。您正在发送 JSON (application/json
)。由于 $_POST
是根据发布的表单数据创建的关联数组,并且您没有发布表单,因此它为空也就不足为奇了。
要从请求正文中获取原始 JSON,您需要使用 php://input
$json = file_get_contents('php://input');
要将 JSON 反序列化为对象,您可以使用 json_decode
。
$logPostData = json_decode($json);
如果你想把数据转换成像$_POST
这样的关联数组,你可以把true
作为第二个参数传进去:
$logPostData = json_decode($json, true);