2015-11-17 16 views
10

Ich möchte Bulk-Lookup ip details at ipinfo.io Hier ist mein Code. $ cat ips.txt | xargs -I% curl http://ipinfo.io/%/regioncurl: (3) Ungültige Zeichen in URL gefunden

Die Datei "ips.txt" jeweils auf einer separaten Zeile drei IP-Adressen enthält: (1) 8.8.8.8 (2) 8.8.4.4 (3) 1.2.3.4

Dies löst nur die letzte IP-Adresse. Es sollte (1) Kalifornien (2) Colorado (3) Washington geben. Ich erhalte die folgende Liste:

curl: (3) Illegal in URL curl gefunden Zeichen: (3) Ungültige Zeichen in URL gefunden Washington

Wenn ich ips.txt mit nur einer IP schreiben Adresse (zum Beispiel 8.8.8.8) bekomme ich gute Ergebnisse. Ich denke, mit meiner Textdatei oder der Art, wie ich Katzen benutze, stimmt etwas nicht. Können Sie mir helfen, meinen Code zu säubern, damit alle drei IP-Adressen aufgelöst werden?

Auf Anfrage, hier sind Details meiner Einrichtung.

$ 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 
+1

Ohne den Inhalt von ips.txt zu kennen, können wir nicht viel tun. Was Sie tun können, ist, den Curl-Aufruf durch ein Skript zu ersetzen, das "echo" trying URL '$ 1' "; curl "$ 1" '- damit kannst du sehen, welcher fehlschlägt. – viraptor

+0

ips.txt ist einfach drei einzelne Zeilen von drei IP-Adressen 8.8.8.8 8.8.4.4 1.2.3.4 – MistaGill

+0

Wenn ich zwei der IP-Adressen eliminiere und nur eins behalte, funktioniert die Curl gut und ich bekomme Ergebnisse. – MistaGill

Antwort

20

So zusammenzufassen, als Schritt-für-Schritt für die Zukunft,

uname -A Laufen kann zeigen, welches System zum Beispiel hier enthüllt benutzt wird es Cygwin ist.

Dies führt uns zu Überlegungen über Windows vs Linux Unterschiede.

Einer der bekannten Unterschiede sind Windows/DOS-Zeilenenden. Dies kann aufgedeckt werden, sowie mit den allgemein alle Inhalte einer Textdatei überprüft, mit:

cat -A ips.txt 

Nun, wenn Sie es enthält ^M Zeilenenden zu finden, wie es hier getan hat, es bedeutet, dass die Zeilenenden sind dos/Fenster und nicht * nix-Zeilenende

Um dies zu beheben laufe

dos2unix ips.txt 

Nun, wenn Sie Ihren ursprünglichen Befehl mit dieser festen Eingabedatei ausführen, so scheint es, einfach (die nur Linien mit der Endung $ zeigen würde) CURL ist glücklich damit Und es funktioniert.

Vielen Dank auch MistaGill, ich habe über ipinfo.io von diesem Beitrag erfahren.

+0

Das Ändern der Zeilenendung in LF funktionierte für mich (ich habe Sublime Text verwendet) – manikanta

+0

Danke! Ich hatte eine Textdatei mit URLs, die ich URI-codiert hatte, aber der Charakter wurde auch codiert. Wenn ich das ausräumte, lief mein Skript gut. –

1

Ich lief in eine ähnliche Situation, und eine mögliche schnelle Lösung ist es, einen -d "\n" Flag xargs hinzuzufügen:

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

Diese von neuen Linien verhindert als Teil des Arguments interpretiert werden zu curl weitergegeben.