【问题标题】:Laravel API call doesn't pass payloadLaravel API 调用不传递有效负载
【发布时间】:2019-05-19 03:34:27
【问题描述】:

我正在尝试在我的 laravel 站点中测试 API 发布调用,但我发现用户不存在,因为我认为有效负载/正文没有被传递

如果我在 Swagger 中手动测试(成功)使用 id 和 body 作为

{
  "password": "passwordTest",
  "email": "email@apitest.com"
}

然后url显示为http://ip.address/login/?id=0,curl为

curl -X POST "http://ip.address/login/?id=0" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"password\": \"passwordTest\", \"email\": \"email@apitest.com\"}"

在我的服务文件中,它应该匹配所有结构,但我将其转储到页面,但没有有效负载(正文)时出现错误

我错过了什么吗?

AuthService.php

public function loginGetToken(){
    $password = "passwordTest";
    $email = "email@apitest.com";
    $id = "0";

    $payload = (object)[
        'password'=>(string)$password,
        'email'=>(string)$email
    ];

    $retval = $this->post('http://ip.address/login/?id='.$id,$payload);

    return $retval;
}

private function post($endpoint,$payload){
    //throws various exceptions:
    $result = $this->guzzleClient->request('POST', $endpoint, ['json'=>$payload]);
    $body = $result->getBody();
    return  json_decode($body);
}

【问题讨论】:

  • //throws various exceptions 你能发布你得到的异常吗?

标签: php laravel api curl


【解决方案1】:

已经有一段时间了,但我相信你需要告诉 Laravel 它正在获取 json。

private function post($endpoint,$payload){
   $options = [
        'headers' => [
            'Accept'       => 'application/json',
            'Content-Type' => 'application/json',
        ],
        'json' => $payload
    ];
    //throws various exceptions:
    $result = $this->guzzleClient->request('POST', $endpoint, options);
    $body = $result->getBody();
    return  json_decode($body);
}

【讨论】:

  • 我实际上让它工作了,但这是一个很好的答案,因为它确保了 JSON 类型以防万一。谢谢!
  • @TomN。你应该为任何追随你的人发布你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2017-11-22
  • 2019-12-22
  • 1970-01-01
  • 2020-11-22
  • 2014-06-29
  • 2020-02-21
相关资源
最近更新 更多