$_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&param2=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-urlencodedmultipart/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);