Pra*_*mar 9 command-line curl ip
我今天在尝试使用以下命令安装 composer 时遇到了一些问题:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
curl: (7) Failed to connect to getcomposer.org port 443: Network is unreachable
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索并找到了这个命令:
echo ipv4 >> ~/.curlrc
Run Code Online (Sandbox Code Playgroud)
我运行了它,它解决了问题,并且 Composer 安装得很好。
但是我不知道上面的命令是做什么的,谁能解释一下?
什么是将“ipv4”添加到文件“curlrc”中。以空文件开头的示例:
$ touch 1
$ more 1
$ echo ipv4 >> 1
$ more 1
ipv4
Run Code Online (Sandbox Code Playgroud)
基本上它强制 curl 使用 ipv4。
该手册是这样说的吧:
IPv6
当主机查找返回 IPv6 地址时,curl 将使用 IPv6 连接到服务器,如果连接失败,则回退到 IPv4。该
--ipv4和--ipv6选项可以指定当两个都可以使用该地址。IPv6 地址也可以使用语法直接在 URL 中指定
UNIX 中的一个典型约定是程序(通常)从各种预定义的文件中读取它们的启动配置。这只是一种传统,不是 POSIX 或任何其他标准定义的任何内容。例如foobar,一个典型的 UNIX 程序会按照以下优先顺序读取:
~/.foobarrc ## User specific configuration parameters
/etc/foobarrc ## Global parameters, depending on taste
## `/etc/foobar/*(.conf)' might be chosen too
Run Code Online (Sandbox Code Playgroud)
可能会出现回退,/usr/share/但这并不常见。
因此,curl这里遵循约定并从~/.curlrc. 通过这样做echo ipv4 >>~/.curlrc,您已将字符串附加ipv4到文件中~/.curlrc。
该字符串ipv4具有特殊含义curl——curl然后将使用 IPv4 进行主机解析。这类似于在命令行中使用-4/ ipv4ascurl的参数,但保存为~/.curlrc使其永久化。
正如您ipv4在那里设置的那样,现在一切都对您有用,大概您已经配置了 IPv6,并且curl以前使用 IPv6 进行(成功)主机解析,因此没有回退到 IPv4。与该站点的连接失败,因为并非所有站点都将其 Web 服务器配置为侦听 IPv6 地址,因此socket()在这种情况下,调用将失败。