2015-06-19 85 views
1

我试图从第三方API返回JSON数据 - http://postcodes.io/。我现在有在我的控制器:Laravel - 即使URL正确,Guzzle也不返回任何数据

$client = new Client(); 
    $request = $client 
     ->get('https://api.postcodes.io/postcodes/'.Input::get('postcode')); 

    $statusCode = $request->getStatusCode(); 

    if ($statusCode >= 200 && $statusCode < 300) 
    { 
     $json = Response::json($request); // Returns JSON decoded array of data. 
    } 

我试图返回邮政编码信息,例如:

https://api.postcodes.io/postcodes/OX495NU

如果我dd($request),那么这个被打印出来,用200状态代码但没有与之相关的数据:

JsonResponse {#245 ▼ 
    #jsonOptions: 0 
    #data: "{}" 
    #callback: null 
    #encodingOptions: 15 
    +headers: ResponseHeaderBag {#242 ▶} 
    #content: "{}" 
    #version: "1.0" 
    #statusCode: 200 
    #statusText: "OK" 
    #charset: null 
} 

任何帮助为什么会发生这将不胜感激。

+0

'$ request-> getBody();'?尽管通常我会做'$ response = $ request-> send();'然后'echo $ response-> getBody();' –

+0

如果我添加'$ response = $ request-> send();'它出现这个错误 - 调用未定义的方法GuzzleHttp \ Psr7 \ Response :: send()'? – Ben

回答

0

你所看到的是来自Guzzle的原始回应,它需要被格式化。一个简单的方法是$response->getBody();

想想这就像在Laravel的一个集合。当你得到数据时,它会在一个包含大量额外数据的集合中,但是如果你只想要运行的数据$user->toJson();对于Guzzle,如果你想删除所有额外的卷曲数据,协议信息,标题等,你只需要有效载荷或正文。 $response->getBody();

+0

更改为您建议的编辑,它仍然不会返回任何数据 - '#data:“{}”'? – Ben

+0

它应该请求的URL也会正确打印。如果我将它从'dd(URL)'复制到我的浏览器中,它将返回我需要的JSON数据。 – Ben

+0

您可以尝试设置客户端的配置设置吗?像'$ client = new Client(['base_uri'=>'https://api.postcodes.io/postcodes/','verify'=> false]);'然后尝试'$ response = $ client-> get(Input :: get('postcode'));'这可能是Guzzle中的默认值不正确。 – dasper

相关问题