Php 如何同时发送JSON请求和post表单数据请求?

Php 如何同时发送JSON请求和post表单数据请求?,php,json,rest,postman,Php,Json,Rest,Postman,因此,这是一个API,应在POST请求中接受以下参数: token (as form data) apiKey (as form data) { "notification": { "id": 1, "heading": "some heading", "subheading": "some subheading", "image": "some image" } } (JSON Post data) 现在我的问题是,我不能在同一个POST请求中同时

因此,这是一个API,应在POST请求中接受以下参数:

token (as form data)
apiKey (as form data)
{
"notification": {
    "id": 1,
    "heading": "some heading",
    "subheading": "some subheading",
    "image": "some image"
     }
 } (JSON Post data)
现在我的问题是,我不能在同一个POST请求中同时发送表单数据和JSON数据。因为,表单数据使用
内容类型:application/x-www-form-urlencoded
,JSON需要
内容类型:application/JSON
,我不确定如何将它们一起发送。我用的是邮递员

编辑:

因此api将调用函数
create
,我需要执行如下操作:

public function create() {


    $token = $this -> input -> post('token');
    $apiKey = $this -> input -> post('apiKey');
    $notificationData = $this -> input -> post('notification');

    $inputJson = json_decode($notificationData, true);
    }
但是我不能将JSON数据和表单数据放在一起

我必须这样做才能只获取JSON数据

public function create(){
$notificationData =  file_get_contents('php://input');
$inputJson = json_decode($input, true);  
} // can't input `token` and `apiKey` because `Content-Type: application/json`
有几种可能性:

  • 将令牌和密钥作为查询参数发送,将JSON作为请求体发送:

    POST /my/api?token=val1&apiKey=val2 HTTP/1.1
    Content-Type: application/json
    
    {"notification": ...}
    
    在PHP中,您通过
    $\u get
    获取密钥和令牌,并通过
    json\u decode(file\u get\u contents)获取主体php://input)

  • 授权
    HTTP头(或任何其他自定义头)中发送令牌和密钥:

    例如,您可以通过
    $\u服务器['HTTP\u AUTHORIZATION']
    获取标题,然后自己解析它

  • 将令牌和密钥作为请求主体的一部分(不是很首选):

  • 有几种可能性:

  • 将令牌和密钥作为查询参数发送,将JSON作为请求体发送:

    POST /my/api?token=val1&apiKey=val2 HTTP/1.1
    Content-Type: application/json
    
    {"notification": ...}
    
    在PHP中,您通过
    $\u get
    获取密钥和令牌,并通过
    json\u decode(file\u get\u contents)获取主体php://input)

  • 授权
    HTTP头(或任何其他自定义头)中发送令牌和密钥:

    例如,您可以通过
    $\u服务器['HTTP\u AUTHORIZATION']
    获取标题,然后自己解析它

  • 将令牌和密钥作为请求主体的一部分(不是很首选):



  • 请发布您的代码。您是否尝试过直接发送JSON而不将内容类型设置为
    application/JSON
    ?它看起来像一个表单帖子,有3个键和3个字符串值。您是在尝试设计此API,还是正在尝试与之对话的现有API…?这不是很清楚。问题不是“如何发送”,而是“服务器希望接收什么”。通常,JSON请求将被服务器读取为请求的完整主体,格式为JSON。POST数据作为请求的完整内容读取,格式为
    key=val&key2=val2
    样式。这两者是不相容的,就像说“我想要一个素食培根三明治”。您需要知道服务器是如何解释您的请求的。服务器可能希望JSON正文中包含GET样式参数(因为GET参数不在请求正文中发送)。请发布您的代码。您是否尝试过直接发送JSON而不将内容类型设置为
    application/JSON
    ?它看起来像一个表单帖子,有3个键和3个字符串值。您是在尝试设计此API,还是正在尝试与之对话的现有API…?这不是很清楚。问题不是“如何发送”,而是“服务器希望接收什么”。通常,JSON请求将被服务器读取为请求的完整主体,格式为JSON。POST数据作为请求的完整内容读取,格式为
    key=val&key2=val2
    样式。这两者是不相容的,就像说“我想要一个素食培根三明治”。您需要知道服务器是如何解释您的请求的。服务器可能希望JSON正文中包含GET样式参数(因为GET参数不在请求正文中发送)。您好,规范是
    token
    apiKey
    是POST数据。解决方案#1不应该被使用,对吗?需要明确的是:解决方案1将数据放入URL查询字符串中。这不是“获取数据”,即使您在PHP中通过
    $\u GET
    访问它。对PHP来说,这是一个糟糕的命名。使用
    POST
    方法的HTTP请求是POST请求。URL查询字符串中的数据不是“获取数据”。因此,不,没有理由不使用解决方案1。并且从字符串
    $token=$this->input->post('token')访问查询参数这就是方法,对吗?我不知道您使用的是什么框架,所以我无法告诉您该框架必须访问URL查询参数的API。嗨,规范是
    token
    apiKey
    是POST数据。解决方案#1不应该被使用,对吗?需要明确的是:解决方案1将数据放入URL查询字符串中。这不是“获取数据”,即使您在PHP中通过
    $\u GET
    访问它。对PHP来说,这是一个糟糕的命名。使用
    POST
    方法的HTTP请求是POST请求。URL查询字符串中的数据不是“获取数据”。因此,不,没有理由不使用解决方案1。并且从字符串
    $token=$this->input->post('token')访问查询参数这就是方法,对吗?我不知道您使用的是什么框架,所以我无法告诉您该框架必须使用什么API来访问URL查询参数。
    
    POST /my/api HTTP/1.1
    Content-Type: application/json
    
    {"key": val1, "token": val2, "notification": ...}