#bash #curl
Вопрос:
Я загружаю cURL несколькими URL-адресами одновременно и испытываю трудности с анализом выходного журнала, чтобы вернуть исходные адреса. А именно, если URL-адрес разрешен, вывод выглядит следующим образом:
$ curl --head --verbose https://www.google.com/
* Trying 64.233.165.106...
* TCP_NODELAY set
* Connected to www.google.com (64.233.165.106) port 443 (#0)
<...>
> HEAD / HTTP/2
> Host: www.google.com
<...>
которые в конечном итоге могут быть проанализированы обратно в https://www.google.com/.
Однако с неверным URL-адресом это не работает:
$ curl --head --verbose --connect-timeout 3 https://imap.gmail.com/
* Trying 74.125.131.109...
* TCP_NODELAY set
* After 1491ms connect time, move on!
* connect to 74.125.131.109 port 443 failed: Operation timed out
<...>
* Failed to connect to imap.gmail.com port 443: Operation timed out
В этом случае сообщение об ошибке содержит URL-адрес, но в других случаях это не так. Я не могу на это положиться.
Итак, мне нужно либо отключить разрешение URL-адреса на IP в выходных данных, например
* Trying https://imap.gmail.com/...
или каким-то образом добавьте каждый URL-адрес из списка в соответствующий вывод, например:
$ curl --head --verbose --connect-timeout 3 https://imap.gmail.com/ https://www.google.com/
https://imap.gmail.com/
* Trying 64.233.162.108...
* TCP_NODELAY set
* After 1495ms connect time, move on!
* connect to 64.233.162.108 port 443 failed: Operation timed out
<...>
https://www.google.com/
* Trying 74.125.131.17...
* TCP_NODELAY set
* Connected to www.gmail.com (74.125.131.17) port 443 (#0)
<...>
Wget или HTTPie-это не вариант. Как этого можно достичь с помощью cURL?
Комментарии:
1. Получение только одного URL-адреса одним
curl
вызовом не является опцией?2. @user1934428, да, спасибо, я ответил на свой вопрос, используя этот подход.
Ответ №1:
Возможно, это и есть решение:
while read LINE ; do
print "REQUESTED URL: $LINE" >> output.txt;
curl $LINE >> output.txt 2>amp;1;
done < url-list.txt
Ответ №2:
Начиная с curl v.7. 75.0, можно с --write-out '%{url}'
помощью опции заставить curl отображать полученный URL-адрес.