Curl: (3) Незаконные символы, найденные в 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) Недопустимые символы, найденные в URL-адресе curl: (3) Незаконные символы, найденные в URL-адресе Вашингтон
Если я пишу ips.txt только с одним IP-адресом (например, 8.8.8.8), я получаю хорошие результаты. Я думаю, что что-то не так с моим текстовым файлом или с тем, как я использую кошку. Можете ли вы помочь мне очистить свой код, чтобы все три 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
Ответы
Ответ 1
Итак, чтобы вкратце, как шаг за шагом для будущей ссылки,
Запуск uname -A
может показать, какая система используется, например, раскрытие здесь - Cygwin.
Это заставляет нас думать о различиях Windows и Linux.
Одним из известных отличий является окончание строк Windows/dos. Это может быть обнаружено, а также при общем проверке всего содержимого текстового файла:
cat -A ips.txt
Теперь, если вы обнаружите, что оно содержит окончание строк ^M
, как это было здесь, это означает, что окончание строк - это dos/windows, а не * nix endings (которые будут показывать только строки, заканчивающиеся на $
)
Чтобы исправить это, просто запустите
dos2unix ips.txt
Теперь, если вы запустили исходную команду с этим фиксированным файлом ввода, кажется, CURL доволен этим, и он работает.
Спасибо, MistaGill, я узнал о ipinfo.io
из этой публикации.
Ответ 2
Я столкнулся с аналогичной ситуацией, и возможное быстрое исправление - добавить флаг -d "\n"
в xargs
:
cat ips.txt | xargs -d "\n" -I% curl http://ipinfo.io/%/region
Это предотвращает интерпретацию новых строк как часть аргумента, передаваемого в curl
.