【问题标题】:php: Request succeeds with cUrl, but fails with Guzzlephp:使用 cUrl 请求成功,但使用 Guzzle 失败
【发布时间】:2016-09-19 04:14:26
【问题描述】:

我试图在我的项目中使用 Guzzle 从 URL 中读取值。请求的 url 只返回一个数字,没有 html 标题、正文或任何内容。起初我只是使用 curl 来阅读它,并且已经发现我需要设置 2 个额外的 cUrl 选项才能成功阅读。我的代码看起来像这样,工作起来就像一个魅力:

$ch = curl_init();  

curl_setopt($ch, CURLOPT_URL, 'http://192.168.2.5/temp');  
curl_setopt($ch, CURLOPT_HEADER, 0);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  

echo $value = curl_exec($ch);  

现在我开始使用 guzzle,我想如果我只使用相同的 cUrl 选项就可以了,所以我创建了以下代码:

$client = new Client( );

$res = $client->request('GET','http://192.168.2.5/temp',['connect_timeout' => 10,'curl' => [CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => true]]);
echo $Value = $res->getBody()->read(1024);

但是,这段代码给了我这个错误:

CurlFactory.php 第 187 行中的 RequestException:cURL 错误 0:cURL 请求重试了 3 次,没有成功。最有可能的 失败的原因是 cURL 无法倒带 请求和随后的重试导致相同的错误。打开 调试选项,看看出了什么问题。看 https://bugs.php.net/bug.php?id=47204 了解更多信息。 (看 http://curl.haxx.se/libcurl/c/libcurl-errors.html)

知道为什么这不起作用吗?

【问题讨论】:

标签: php curl guzzle


【解决方案1】:

这对我来说很好用(使用 guzzle 6.2.0):

$client = new \GuzzleHttp\Client();
$response = $client->request('GET','http://google.com');
echo $response->getBody()->getContents();

或者,看看这篇文章,检查你的服务器是否返回类似的东西,这可能会导致问题。

https://www.bountysource.com/issues/32019967-breaking-change-in-guzzle-6-when-receiving-a-204-no-content-response-with-no-body

【讨论】:

  • 确定可行,问题是我正在向服务发出 http 请求,该服务只会给我一个数字,没有别的。这对 guzzle / cUrl 来说似乎很困难
  • 您的服务在其响应中使用什么内容类型?
  • HTTP/1.1 200 OK 内容类型:text/html
  • 我刚刚用 lumen 作为服务做了一个快速测试,只返回一个 int。没问题。您的服务响应可能会妨碍 guzze。如果你不想改变你的服务,考虑使用 6 之前的 guzzle 版本,那些可能没有那么严格。
  • 听起来响应可能没有按预期提供信息。当您从命令行使用 curl 执行事务时会发生什么? @akrabat 有一篇关于在此处显示 curl 请求/响应内容的精彩帖子:akrabat.com/view-header-and-body-with-curl 您收到的错误表明您没有收到预期的/响应。
【解决方案2】:

我的猜测是CURLOPT_RETURNTRANSFER,因为我发现这个问题正在寻找相同问题的答案。

最终在这个 Github 问题的底部得到了我的答案:https://github.com/guzzle/guzzle/issues/2048

TL;DR – 当设置了CURLOPT_RETURNTRANSFER 时,Guzzle 正在破坏CURLOPT_FILECURLOPT_WRITEFUNCTION;更多详情Reading curl request progress headers with Guzzle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2019-12-17
    • 2017-10-05
    相关资源
    最近更新 更多