首页 文章

如何一起发送JSON请求和发布表单数据请求?

提问于
浏览
0

所以这是一个应该在POST请求中接受以下参数的API:

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数据一起发送 . 因为,表单数据使用 Content-Type: application/x-www-form-urlencoded 并且JSON需要使用Postman来使用 Content-Type: application/json I 'm not sure how do I send both of them together. I'm .

编辑:

所以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数据 only

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`

1 回答

  • 3

    几种可能性:

    • 将标记和密钥作为查询参数发送,将JSON作为请求主体发送:
    POST /my/api?token=val1&apiKey=val2 HTTP/1.1
    Content-Type: application/json
    
    {"notification": ...}
    

    在PHP中,您可以通过 $_GET 获取密钥和令牌,并通过 json_decode(file_get_contents('php://input')) 获取正文 .

    • Authorization HTTP标头(或任何其他自定义标头)中发送令牌和密钥:
    POST /my/api HTTP/1.1
    Authorization: MyApp TokenVal:KeyVal
    Content-Type: application/json
    
    {"notification": ...}
    

    您可以通过例如 $_SERVER['HTTP_AUTHORIZATION'] 获取 Headers 并自行解析 .

    • 制作请求正文的令牌和关键部分(不是非常首选):
    POST /my/api HTTP/1.1
    Content-Type: application/json
    
    {"key": val1, "token": val2, "notification": ...}
    

相关问题