【问题标题】:How to get json data instead of the HTML Page using Guzzle?如何使用 Guzzle 获取 json 数据而不是 HTML 页面?
【发布时间】:2019-08-08 09:47:22
【问题描述】:

我正在尝试将我的 API 连接到我的网站以检索数据。当用户连接时,会调用 API 以获取 JSON 格式的数据,但响应会为我提供 API 登录页面的 html。

我为此使用 Guzzle 6 和 laravel 5.8。

public static function getClient()
{

    $url = config( 'test.default_api_url' );
    $client = new Client([ 'base_uri' => $url, 'timeout'  => 200.0 ]);
    return $client;

}

public static function callApiOnce($method, $route, $options)
{
    $client = self::getClient(); 
    $response = $client->request($method, $route, $options)->getBody()->getContents();
    if( $response )
    {
        $contents = (string) $response;
        return $contents;
    }
    return false;
}

public static function callApiMany($routes)
{
    $response = [];
    foreach($routes as $route => $settings)
    {
        $json = self::callApiOnce(
            $settings['method'],
            $settings['route'],
            $settings['options']
        );
        $response[$route] = $json;
    }
    return $response;
} 

public function getHomeData()
{
    $routes = [
        "home_tile_1" => [
            "method" => "GET",
            "route" => "aggregates",
            "options" => [
                "query" => [
                    "user_id" => $_SESSION[ "userId" ],
                    "api_token" => $_SESSION[ "api_token" ],
                    "type" => "monthly",
                    "month" => "last"
                ],
                "headers" => [
                    'Content-Type' => 'application/json',
                    'Accept' => 'application/json',
                    'Authorization' => 'Bearer ' . $_SESSION[ "api_token" ]
                ]
            ]
        ]
    ];
    
    
    $response = ApiRequestController::callApiMany( $routes );
    
    return response()->json( [ "success" => true, "data" => $response ] );
}

我希望以 JSON 格式获取数据,但我只获取 API HTML 页面...

感谢您的关注。

【问题讨论】:

  • 这里有几层,Arnaud。你在哪里期待 JSON?在getHomeData 方法中的$response 变量中?
  • 嗨,是的,我想在 $response 中获取 JSON。它适用于邮递员,我得到 JSON 而不添加标题...

标签: html laravel http request guzzle


【解决方案1】:

您是否尝试通过 json_encode 将数据发送到 API? 并使用 json_decode 来获取输出。

如果可能的话,请发布你得到的错误或html页面

【讨论】:

  • 我发现问题出在哪里......只是一个路线问题......这是一个自制的API。感谢您的帮助
  • @ArnaudCartailler 请发布您的解决方案作为答案。
【解决方案2】:

我发现问题出在哪里......只是一个路线问题......这是一个自制的 API。感谢您的帮助。

【讨论】:

  • 如果有人想知道他所说的“路线问题”是什么意思,他很可能在路线上打错了字。我在使用 Laravel Passport 时遇到了完全相同的问题,使用 Guzzle 向 oauth/token 端点发出发布请求。我的问题是,端点网址是“h t p s://myweb.com”,但我错过了“https”的“s”,因此我一直在向“h t p://myweb.com”发出请求!遇到这个问题的朋友,请仔细检查你的endpoint URL是否正确,是路由问题!!!花了 4 个小时试图弄清楚这一点。
猜你喜欢
  • 2019-03-07
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2021-11-13
  • 2018-08-27
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多