【问题标题】:Guzzle returns cURL error 3: <url> malformedGuzzle 返回 cURL 错误 3:<url> 格式错误
【发布时间】:2015-06-25 16:46:40
【问题描述】:

我想试用 guzzle 库,并按照他们的 quickstart 教程向 api 发出 http 请求。

但它似乎不起作用,因为我收到以下错误:

cURL error 3: <url> malformed

由于我以前从未使用过 cURL,我什至不知道如何响应该错误消息。这是我提出的请求的代码:

    $client = new Client();
    $client->get('/', ['verify' => true]);

    $response = $client->get('https://api.github.com/');

    dd($response);

我正在使用 Laravel 5 框架并在我的 HomeController 中调用 index 方法。我也在使用 WAMP。

我将不胜感激任何帮助和建议,因为我想尝试 Guzzle。

这是我收到的错误消息的图片:

【问题讨论】:

  • 如果我下面的回答对你有帮助,你可以接受:)
  • @loveAndHappiness 你有解决这个问题的方法吗?我的代码中有同样的问题:(请帮助我
  • 我还没有时间为这个项目实施任何解决方案,所以我不知道提供的解决方案是否解决了这个问题。

标签: php laravel curl guzzle


【解决方案1】:

如果您来到这里是因为您在 Google 上搜索“Guzzle 返回 cURL 错误 3:格式错误”,请检查客户端参数。在某些版本中,它是 base_uri 和其他 base_url

    $client = new Client([
        'base_uri' => 'http://localhost:8000',  // <-- base_uri instead of base_url
    ]);

【讨论】:

  • 这解决了我的问题。谢谢你。我从 .env 文件中的 APP_URL 获得了 base_uri 值。
  • 同样的事情,我最后得到了带有/的URL。在没有/ 的情况下保留它,然后在我的通话开始时添加/ 并且它起作用了。
【解决方案2】:

如果您想禁用验证(不要这样做!):

$response = $client->get('https://api.github.com/', ['verify' => false]);

可以通过提供适当的 CA 捆绑文件来解决此问题,而不是完全禁用验证。请参阅 Guzzle 文档中的 verify

$client->setDefaultOption(
    'verify', 
    'C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt'
);

【讨论】:

  • 其实这不是问题,因为没有这一行,我得到另一个错误“cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书”,并且 guzzle faq 说这行需要在那里。
  • 不确定如何解决“格式错误的 URL”错误,或者为什么它被标记为接受。
【解决方案3】:

你不应该有这个电话:

$client->get('/', ['verify' => true]);

这就是引发错误的原因。第三行没问题。

错误就是它所说的。 URL / 显然无效。实例化客户端时,使用base_uri 选项,或在对get() 的调用中指定完整的URL。

【讨论】:

  • 第 2 行有什么问题,为什么 OP 没有它?
  • 在第一行初始化 guzzle 客户端时,他没有传入 url。所以在第二行,当他使用'/'时,没有base url,必然会抛出错误[malformed url]
【解决方案4】:

就我而言,我错误地将我的环境文件命名为“env”

确保它存在于根路径并命名为“.env”

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2018-06-01
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多