使用 curl - JSON 访问 Laravel Rest API

Posted

技术标签:

【中文标题】使用 curl - JSON 访问 Laravel Rest API【英文标题】:Accessing Laravel Rest API with curl - JSON 【发布时间】:2015-06-01 20:50:59 【问题描述】:

我正在尝试让我的客户使用我的 API,但我遇到了一些麻烦,我是 cURL 的新手,所以也许你可以帮助我。

我的 API 控制器(laravel.project/api/v1/users/id

public function show($user)
    

       if ($user == null)
            return $this->setStatusCode(404)->respondNotFound('User not found');

        return $this->respond($user);
    

这是我通过 POSTMAN 发出简单请求得到的答案


    "data": 
        "id": 4,
        "name": "Helena",
        "email": "hh@gmail.com",
        "created_at": "2015-03-26 21:13:16",
        "updated_at": "2015-03-26 21:13:16"
    



Response Headers:

Cache-Control → no-cache
Connection → keep-alive
Content-Type → application/json
Date → Sat, 28 Mar 2015 15:44:45 GMT
Server → nginx/1.6.2
Transfer-Encoding → chunked

到目前为止一切都很好,但是当我以这种方式在客户端中使用 cURL 时:

public function delete($url, $token)
    

        $final_url = $this->base_url . $url;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $final_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token, 'Content-Type: application/json'));

        $result = curl_exec($ch);
        curl_close($ch);

        return $result;
    

我得到的响应不是 json:

"
  "data":
    "id":4,
    "name":"Helena",
    "email":"hh@gmail.com",
    "created_at":"2015-03-26 21:13:16",
    "updated_at":"2015-03-26 21:13:16"
"

它看起来像一个 json 响应,但请注意乞求时的引号,最后,我无法使用 json_encode 或 json_decode 解析它。

我已经为此苦苦挣扎了一段时间,任何意见都值得赞赏。

只是为了确保您理解我的问题,代码运行良好,但是当使用 curl 发出请求时,它不使用内容类型标头

编辑1:

#165
  +"data": #167
    +"id": 4
    +"name": "Helena"
    +"email": "hh@gmail.com"
    +"created_at": "2015-03-26 21:13:16"
    +"updated_at": "2015-03-26 21:13:16"
  

【问题讨论】:

在第一种情况下,您将返回一个由 Laravel 自动序列化为 JSON 的数组。在第二种情况下,您将现有的 JSON 作为字符串返回,Laravel 将其视为字符串并按原样返回。你可以做的只是在 $result 上运行 json_decode 来解析 JSON,然后返回解析后的数组,然后 Laravel 会像第一种情况一样处理它。 响应现在在 EDIT 1 中。 【参考方案1】:

试试return $result,而不是:

return response()->json(json_decode($result));

【讨论】:

以上是关于使用 curl - JSON 访问 Laravel Rest API的主要内容,如果未能解决你的问题,请参考以下文章

有关 JSON、cURL 和 laravel 的参考文档

Laravel Wordpress JSON REST API 给出奇怪的 Curl 错误

在 laravel 中安装 curl 和 json 扩展

Laravel 中的 cURL 请求

如何解决 Laravel 安装时 MAC OS 上的 curl 证书问题?

php:使用 cURL 获取 url 内容(json)