【问题标题】:Laravel - Guzzle not returning any data even though URL is correctLaravel - 即使 URL 正确,Guzzle 也不返回任何数据
【发布时间】:2015-06-19 20:25:25
【问题描述】:

我正在尝试从第三方 API - http://postcodes.io/ 返回 JSON 数据。我目前在我的控制器中有:

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

任何帮助解释为什么会发生这种情况将不胜感激。

【问题讨论】:

  • $request-&gt;getBody();?虽然通常我会做一个$response = $request-&gt;send(); 然后echo $response-&gt;getBody();
  • 如果我添加 $response = $request-&gt;send(); 它会显示此错误 - Call to undefined method GuzzleHttp\Psr7\Response::send() ?

标签: php laravel laravel-4 laravel-5 guzzle


【解决方案1】:

您看到的是来自 Guzzle 的原始响应,需要对其进行格式化。一个简单的方法是$response-&gt;getBody();

把它想象成 Laravel 中的一个集合。当您取回数据时,它包含在一个集合中,其中包含一堆可能有用的额外数据,但如果您只想要这些数据,您将运行 $user-&gt;toJson(); 对于 Guzzle,如果您想去除所有额外的 curl 数据,协议信息、标头等,您只需要有效负载或正文。 $response-&gt;getBody();

【讨论】:

  • 更改为您建议的编辑,它仍然没有返回任何数据 - #data: "{}"?
  • 它应该请求的 URL 也可以正确打印出来。如果我将它从dd(URL) 复制到我的浏览器中,它会返回我需要的 JSON 数据。
  • 您可以尝试设置客户端的配置设置吗?类似$client = new Client(['base_uri' =&gt; 'https://api.postcodes.io/postcodes/', 'verify' =&gt; false]); 然后尝试$response = $client-&gt;get(Input::get('postcode')); 这可能是Guzzle 中的默认设置不正确。
  • 如果我dd($reponse),它会返回:Response {#250 ▼ -reasonPhrase: "OK" -statusCode: 200 -headers: array:8 [▶] -headerLines: array:8 [▶] -protocol: "1.1" -stream: Stream {#241 ▶} } 比以前更少的字段?
  • 对响应时间感到抱歉。我还在工作,正在开会。这是我在本地运行的确切代码,我相信它会得到你想要的 $client = new Client([ 'base_uri' =&gt; 'https://api.postcodes.io/', 'timeout' =&gt; 2.0, 'verify' =&gt; false ]); $response = $client-&gt;get('postcodes/OX495NU'); echo $response-&gt;getBody(); die();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
相关资源
最近更新 更多