Laravel - Guzzle не возвращает никаких данных, хотя URL-адрес правильный

Я пытаюсь вернуть данные JSON из стороннего API — http://postcodes.io/. В настоящее время у меня есть в моем контроллере:

 $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
}

Любая помощь, почему это происходит, будет принята с благодарностью.


person Community    schedule 19.06.2015    source источник
comment
$request->getBody();? хотя обычно я делаю $response = $request->send();, а затем echo $response->getBody();   -  person Mark Baker    schedule 19.06.2015
comment
Если я добавлю $response = $request->send();, появится эта ошибка - Call to undefined method GuzzleHttp\Psr7\Response::send()?   -  person    schedule 19.06.2015


Ответы (1)


То, что вы видите, — это необработанный ответ от Guzzle, и его необходимо отформатировать. Простой способ — $response->getBody();.

Думайте об этом как о коллекции в Laravel. Когда вы получаете данные обратно, они находятся в коллекции с кучей дополнительных данных, которые могут быть полезны, но если вам нужны только данные, которые вы бы запустили $user->toJson(); Для Guzzle, если вы хотите удалить все дополнительные данные curl, протокол информация, заголовки и т. д., вам нужна только полезная нагрузка или тело. $response->getBody();

person dasper    schedule 19.06.2015
comment
Переходя к предложенному вами редактированию, он по-прежнему не возвращает данных - #data: "{}"? - person ; 19.06.2015
comment
URL-адрес, который он должен запрашивать, также распечатывается правильно. Если я скопирую его из dd(URL) в свой браузер, он вернет нужные мне данные JSON. - person ; 19.06.2015
comment
Можете ли вы попытаться настроить параметры конфигурации клиента? Что-то вроде $client = new Client(['base_uri' => 'https://api.postcodes.io/postcodes/', 'verify' => false]);, затем попробуйте $response = $client->get(Input::get('postcode')); Возможно, значения по умолчанию в Guzzle неверны. - person dasper; 20.06.2015
comment
если я dd($reponse), он возвращает это: Response {#250 ▼ -reasonPhrase: "OK" -statusCode: 200 -headers: array:8 [▶] -headerLines: array:8 [▶] -protocol: "1.1" -stream: Stream {#241 ▶} } Еще меньше полей, чем раньше? - person ; 20.06.2015
comment
не дд это. echo $response->getBody(); die(); - person dasper; 20.06.2015
comment
извините за время ответа. Я все еще на работе и был на совещании. Это точный код, который я запускал на своем локальном компьютере, и я считаю, что он дает то, что вы хотите $client = new Client([ 'base_uri' => 'https://api.postcodes.io/', 'timeout' => 2.0, 'verify' => false ]); $response = $client->get('postcodes/OX495NU'); echo $response->getBody(); die(); - person dasper; 20.06.2015