代码之家  ›  专栏  ›  技术社区  ›  Panderex

无法在Postman中读取数据,但在使用axios时有效

  •  0
  • Panderex  · 技术社区  · 2 年前

    目前构建一个restful API只是为了练习,但我注意到的一件事是,根据我阅读它的方式,它要么抛出错误,要么没有结果,要么实际工作。前端是React使用axios库进行请求。后端只是简单的PHP。

    我有两种阅读方式,

    1. file_get_contents("php://input") 当我从前端提出请求时,我可以读取表单数据并使用它。 然而,当我寄来邮差时,它什么也不回。建议使用的人员 x-www-form-urlencoded 所以我试了一下,但结果是一样的。其他人建议阅读superglobals

    2. $_POST['item'] 在poster中,它可以读取数据,这没有问题,但如果我用axios发送,它会抛出一个未定义的数组键警告。

    我希望能够在使用Postman构建api时对其进行测试,而不必在以后将其合并到实际应用程序中时进行更改。从这一点上看毫无头绪,所以任何建议都会有所帮助。如果我做了蠢事,我会道歉

    Axios部分:

    let fdata = {
      email: "testemail",
      achternaam: "testachternaam",
    };
    
    axios
      .post("http://localhost/api/test", fdata)
      .then((result)=>{
        console.log(result.data)
    })
    

    PHP部分

    header('Access-Control-Allow-Origin: *');
    header("Access-Contro-Allow-Headers: *");
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers,Authorization ,X-Requested-With");
    header('Content-Type: application/json; charset=utf-8');
    
    print_r($data json_decode(file_get_contents("php://input"))); // this works in with axios, but doesn't work with postman
    
    echo $email = $_POST['email'];
    // works in postman, but not with axios
    

    在邮差里,我把完全一样的东西寄进来 formdata 而且 x-www-form-urlencoded

    Postman Request

    1 回复  |  直到 2 年前
        1
  •  1
  •   ADyson    2 年前

    Axios自动将您传递的数据转换为 .post() 转换为JSON格式(请参阅 https://axios-http.com/docs/post_example ).相比之下,PostMan请求发送表单url编码的数据(其中键和值编码在键-值元组中,由 & ,带有 = 键和值之间,例如。 email=testemail&achternaam=testachternaam ).

    这些是不同的格式,PHP以不同的方式读取它们。 json_decode 不能处理非JSON数据,但相反,只向中添加表单编码的数据 $_POST 自动地

    要从Postman发送等效数据,请将格式更改为“原始”,然后粘贴

    {
      "email": "testemail",
      "achternaam": "testachternaam",
    }
    

    中,并选择JSON作为格式。