使用Laravel和Guzzle检索API响应

时间:2019-08-22 12:06:02

标签: laravel api guzzle

我想从我的Laravel项目中的API获得答案。显然,Guzzle似乎是最好的解决方案。 这是1.6.0b6版中的Check_MK API

我创建了一个与API进行通信的模型,以尊重MVC模型

模型

<?php

namespace App;

use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;

class Hostgroup
{
    public static function all() {
        $client = new \GuzzleHttp\Client();
        $request = new Request('GET', 'https://my-api-uri.tld', [
            'query' => [
                'action' => 'get_all_host',
                '_username' => 'user',
                '_secret' => 'secret',
                'output_format' => 'json'
            ]]);
        $hostgroup = $client->send($request, ['timeout' => 2]);
        return $hostgroup;
    }
}

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Hostgroup;

class MainDashboardController extends Controller
{

    public function index() {
        $hostgroup = Hostgroup::all();
        return view('dashboard.main', [
            'hostgroup' => $hostgroup
        ]);
  }
}

当前我在项目页面上收到错误500,但API向我发送了带有请求标头的代码200。

实际上我知道了:

Response {#209 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:9 [▶]
  -headerNames: array:9 [▶]
  -protocol: "1.1"
  -stream: Stream {#207 ▼
    -stream: stream resource @278 ▼
      wrapper_type: "PHP"
      stream_type: "TEMP"
      mode: "w+b"
      unread_bytes: 0
      seekable: true
      uri: "php://temp"
      options: []
    }
    -size: null
    -seekable: true
    -readable: true
    -writable: true
    -uri: "php://temp"
    -customMetadata: []
  }
}

2 个答案:

答案 0 :(得分:0)

$hostgroup是您可能不想要的Psr\Http\Message\ResponseInterface。您将需要响应的实际内容。尝试添加它:

return $hostgroup->getBody()->getContents();

答案 1 :(得分:0)

首先,我需要您按以下方式致电Guzzle: 替换:

pom.xml

使用:

import tkinter as tk
from tkinter import ttk

#custom color
BLUE = '#%02x%02x%02x' % (11, 69, 126)


mainWindow = tk.Tk()
mainWindow.geometry("250x100")
mainWindow.resizable(0, 0)

s = ttk.Style()
s.configure('Blue.TLabelframe.Label', font=('DejaVu Sans', 10, 'bold'))
s.configure('Blue.TLabelframe.Label', foreground = BLUE)

labelFrame = ttk.LabelFrame(mainWindow, text="Some Text", style= 'Blue.TLabelframe')
labelFrame.grid(column=0, row=0, sticky='nsew')
textLable = ttk.Label(labelFrame, text='Some Text inside the frame')
textLable.pack()

mainWindow.mainloop()

并调试来自函数ALL的响应 制作

$request = new Request('GET', 'https://my-api-uri.tld', [

并检查结果并比较API的功能。 并且也不需要使用thoese:

$request = $client->get('https://my-api-uri.tld', [