Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
curl:(3)在URL中发现非法字符_Curl_Cat_Ip Geolocation - Fatal编程技术网

curl:(3)在URL中发现非法字符

curl:(3)在URL中发现非法字符,curl,cat,ip-geolocation,Curl,Cat,Ip Geolocation,我想批量查找这里是我的代码。 $cat ips.txt | xargs-I%curlhttp://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.

我想批量查找这里是我的代码。
$cat ips.txt | xargs-I%curlhttp://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

因此,总结一下,作为今后参考的一步

运行
uname-A
可以显示正在使用的系统,例如,这里显示的是Cygwin

这让我们想到Windows和Linux的区别

已知的区别之一是windows/dos行的结尾。这一点可以通过以下方式显示出来,通常也可以通过检查文本文件的所有内容来显示:

cat -A ips.txt
现在,如果您发现它包含
^M
行结束符,就像这里一样,这意味着行结束符是dos/windows,而不是*nix行结束符(这将只显示以
$
结尾的行)

要解决此问题,只需运行

dos2unix ips.txt
现在,如果您使用这个固定的输入文件运行您的原始命令,那么CURL似乎对它很满意,并且可以正常工作


同样感谢您,MistaGill,我从这篇文章中了解了
ipinfo.io

我遇到了类似的情况,一个可能的快速解决方法是在
xargs
中添加一个
-d“\n”
标志:

cat ips.txt | xargs -d "\n" -I% curl http://ipinfo.io/%/region

这可以防止新行被解释为传递给
curl

的参数的一部分,而不知道ips.txt的内容,我们做不了多少。您可以做的是用一个脚本替换curl调用,该脚本执行
echo“tryingurl'$1'”;卷曲“$1”
-这将允许您查看哪一个失败。ips.txt只是三个ip地址的三行8.8.8.8.8.8.8.4.4 1.2.3.4如果我删除任意两个ip地址并只保留一个,则curl工作正常,我会得到结果。检查txt文件的字符编码,然后检查PHP的字符编码假设剧本两者都应该定义,而不是假设信息的链接。可能不是Cygwin的问题,因为只处理文本,这应该是通用的,不包括任何编码问题,但从我可以看出,这不是一个编码错误,它是在抱怨你传递的整个URL
Washington
。但我没有在输入中看到华盛顿。那你怎么办,更新问题,把它包括进去。把行尾改成LF对我来说很有效(我用了升华文本)谢谢!我有一个URL的文本文件,对其进行了URI编码,但\r字符也进行了编码。删掉它使我的脚本运行良好。此外,如果您在windows共享驱动器上运行dos2unix,它将失败。因此,将文本文件移动到本地linux并运行该命令。