CURLOPT_URL 有 {} 个字符

CURLOPT_URL with {} characters

在我看到的从 PHP 建立 curl 连接的示例中,它有这一行:

curl_setopt($ch, CURLOPT_URL, "{$url}");

它似乎确实有效,但我不明白为什么他们显示将 URL 包裹在波浪形大括号中。这对 CURL 有什么神奇的作用吗?

你只需要

curl_setopt($ch, CURLOPT_URL, "$url");

你有 {$url},但是 PHP 只是替换了 $url,所以大括号在 url 周围。

祝你好运!

更新:

来自 curl 文档和多个 SO 问题:

-g/--globoff
              This  option  switches  off  the "URL globbing parser". When you set this option, you can
              specify URLs that contain the letters {}[] without having them being interpreted by  curl
              itself.  Note  that  these  letters  are not normal legal URL contents but they should be
              encoded according to the URI standard.

libcurl 根本不解释大括号,这是在字符串传递给 libcurl 之前由 PHP 自己完成的。

如果您尝试使用 curl 在命令行上使用此类,您自己可以很容易地看到:

$ curl -g '{http://example.com/}'
curl: (1) Protocol "{http" not supported or disabled in libcurl

使用 -g 关闭 globbing,因为命令行工具使用 globbing 否则会改变测试,它 工作。再次说明:此处另一个答案中也提到的 globbing 仅由 命令行工具 实现和提供,因此 PHP/CURL 没有此类支持。这不是您在 PHP 程序中看到的。

"{$url}"完全等同于(string)$url。请参阅:PHP: Strings - Manual

  • 如果$url的值类型不是string,则转成string。
  • 如果 $url 的值类型总是字符串,则它们的代码是 verbosenonsense.
    您应该将 "{$url}" 替换为 $url.