【发布时间】:2016-02-19 12:48:03
【问题描述】:
我想批量查找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) URL中发现非法字符 curl: (3) URL中发现非法字符 华盛顿
如果我只用一个 IP 地址(例如 8.8.8.8)编写 ips.txt,我会得到很好的结果。我认为我的文本文件或我使用 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
【问题讨论】:
-
在不知道 ips.txt 的内容的情况下,我们无能为力。您可以做的是将 curl 调用替换为执行
echo "Trying url '$1'"; curl "$1"的脚本 - 这将允许您查看哪个失败。 -
ips.txt 就是三个单行的三个ip地址 8.8.8.8 8.8.4.4 1.2.3.4
-
如果我消除任何两个 IP 地址并只保留一个,那么 curl 工作正常,我得到结果。
-
检查TXT文件的字符编码,然后检查PHP脚本的字符编码假设。两者都应该被定义而不是假设
-
感谢您的信息。可能不是 Cygwin 问题,因为只处理文本,这应该是通用的,除非有任何编码问题,但据我所知,它不是编码错误,它抱怨你传递给它的整个 URL
Washington。但我在输入中没有看到Washington。怎么办cat -A ips.txt并更新问题以包含此内容。
标签: curl cat ip-geolocation