curl: (3) 在 URL 中发现非法字符
curl: (3) Illegal characters found in URL
我想批量查找ip details at ipinfo.io这是我的代码。
$ cat ips.txt | xargs -I% curl http://ipinfo.io/%/region
文件 "ips.txt" 包含三个 IP 地址,每个地址都在单独的一行上:
(1) 8.8.8.8
(2) 8.8.4.4
(3) 1.2.3.4
这只会解析最后一个 IP 地址。它应该给 (1) 加利福尼亚州 (2) 科罗拉多州 (3) 华盛顿州。我得到以下信息:
curl: (3) Illegal characters found in URL
curl: (3) Illegal characters found in URL
Washington
如果我写 ips.txt 只有一个 ip 地址(例如 8.8.8.8),我会得到很好的结果。我认为我的文本文件或我使用 cat 的方式有问题。你能帮我清理我的代码以便解析所有三个 ip 地址吗?
根据要求,这里是我的设置的详细信息。
$ uname -a
CYGWIN_NT-10.0 OFFICECOMP 2.3.1(0.291/5/3) 2015-11-14 12:44 x86_64 Cygwin
$ curl -V
curl 7.45.0 (x86_64-unknown-cygwin) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 lib idn/1.29 libssh2/1.5.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: Debug IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets Metali
所以总结一下,作为未来参考的一步一步,
运行 uname -A
可以显示正在使用的系统,例如在这里显示它是 Cygwin。
这让我们思考 Windows 与 Linux 的区别。
其中一个已知差异是 windows/dos 行结尾。这可以揭示,以及通常检查文本文件的所有内容,使用:
cat -A ips.txt
现在,如果您发现它包含 ^M
行结尾,就像它在这里所做的那样,这意味着行结尾是 dos/windows 而不是 *nix 行结尾(这将只显示以 [ 结尾的行=14=])
要解决这个问题,只需 运行
dos2unix ips.txt
现在,如果您 运行 使用此固定输入文件的原始命令,CURL 似乎很满意并且可以正常工作。
也谢谢 MistaGill,我从这个 post 中了解了 ipinfo.io
。
我 运行 遇到了类似的情况,可能的快速解决方法是向 xargs
添加一个 -d "\n"
标志:
cat ips.txt | xargs -d "\n" -I% curl http://ipinfo.io/%/region
这可以防止新行被解释为传递给 curl
的参数的一部分。
我想批量查找ip details at ipinfo.io这是我的代码。
$ cat ips.txt | xargs -I% curl http://ipinfo.io/%/region
文件 "ips.txt" 包含三个 IP 地址,每个地址都在单独的一行上: (1) 8.8.8.8 (2) 8.8.4.4 (3) 1.2.3.4
这只会解析最后一个 IP 地址。它应该给 (1) 加利福尼亚州 (2) 科罗拉多州 (3) 华盛顿州。我得到以下信息:
curl: (3) Illegal characters found in URL curl: (3) Illegal characters found in URL Washington
如果我写 ips.txt 只有一个 ip 地址(例如 8.8.8.8),我会得到很好的结果。我认为我的文本文件或我使用 cat 的方式有问题。你能帮我清理我的代码以便解析所有三个 ip 地址吗?
根据要求,这里是我的设置的详细信息。
$ uname -a
CYGWIN_NT-10.0 OFFICECOMP 2.3.1(0.291/5/3) 2015-11-14 12:44 x86_64 Cygwin
$ curl -V
curl 7.45.0 (x86_64-unknown-cygwin) libcurl/7.45.0 OpenSSL/1.0.2d zlib/1.2.8 lib idn/1.29 libssh2/1.5.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: Debug IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets Metali
所以总结一下,作为未来参考的一步一步,
运行 uname -A
可以显示正在使用的系统,例如在这里显示它是 Cygwin。
这让我们思考 Windows 与 Linux 的区别。
其中一个已知差异是 windows/dos 行结尾。这可以揭示,以及通常检查文本文件的所有内容,使用:
cat -A ips.txt
现在,如果您发现它包含 ^M
行结尾,就像它在这里所做的那样,这意味着行结尾是 dos/windows 而不是 *nix 行结尾(这将只显示以 [ 结尾的行=14=])
要解决这个问题,只需 运行
dos2unix ips.txt
现在,如果您 运行 使用此固定输入文件的原始命令,CURL 似乎很满意并且可以正常工作。
也谢谢 MistaGill,我从这个 post 中了解了 ipinfo.io
。
我 运行 遇到了类似的情况,可能的快速解决方法是向 xargs
添加一个 -d "\n"
标志:
cat ips.txt | xargs -d "\n" -I% curl http://ipinfo.io/%/region
这可以防止新行被解释为传递给 curl
的参数的一部分。