#linux #bash #curl
#linux #bash #curl
Вопрос:
Небольшое примечание: я удалил http:// из раздела перед каждой ссылкой, потому что stackoverflow не позволяет мне публиковать ее оригинальным способом. Я написал скрипт, который позволяет получить доступ к веб-странице, перехватить URL-адрес и загрузить его. Из-за одного из URL-адресов curl перестает работать, и все URL-адреса в списке становятся одинаковыми. Скрипт работает следующим образом:-
PAGE=$(curl -sL pageurl)
FILE_URL=$(echo $PAGE | sed -e 's/^.*<a href="(.*)">(.*) alt="File" /></a>.*$/1/')
ЗНАЧЕНИЕ FILE_URL равно
URL/files/PartOne - Booke (Coll).pdf
webprod25.megashares.com/index.php?d01=3109985amp;lccdl=9e8e091ef33dd103amp;d01go=1amp;fln=/adobe reader exe.rar
И ТАК один для других
Когда curl попытался перехватить этот URL, он показывает следующую ошибку, используя режим отладки bash
curl -sOL 'webprod37.megashares.com/index.php?d01=3109985amp;lccdl=9e8e091ef33dd103amp;d01go=1amp;fln=/adobe' reader exe.rar fileshare273.depositfiles.com/auth-13023763920cd7ec18a0fdbfa8b62d35-188.165.197.50-43792102-7713641/FS273-7/PageMaker.rar -sOLJg fileshare601.depositfiles.com/auth-1302376689013d421df6c01e7f64c8d2-188.165.197.50-43801594-82379659/FS601-2/Adobe_Flash_Player_v10.3.180.65.2.rar -sOLJg 'webprod37.megashares.com/index.php?d01=de48789amp;lccdl=9e8e091ef33dd103amp;d01go=1amp;fln=/KAZAMIZA.COM.Adobe.Flash' Player-10.3.180.65.Beta-2.JUDGMENT DAY.rar bellatrix.oron.com/spzsttzwytpflwd76j3ne2moukomuhcdxg6llddfztqa2ztd7cplwwp457h3mxuacq3pbxzs/An-Beat - Mentally Insine '(Original' 'Mix).mp3'
curl: option -: is unknown
curl: try 'curl --help' or 'curl --manual' for more information
В кавычках указано, что curl поместил это сам, я пытался сделать некоторые обходные пути, такие как экранирование URL, но это не работает.
Комментарии:
1. Вы пытались записать параметры в кавычки?
Ответ №1:
Основная проблема, по-видимому, заключается в том, что вы используете расширение $ () для чего-то, что мне кажется многострочным значением. Вам следует попробовать выполнить итерацию по каждой строке.
Другая проблема похожа на неправильное цитирование URL-адресов, содержащих пробелы. В «An-Beat — Mentally Insine» есть одинокая черта (-)
О, еще одна проблема: часть sed для перехвата содержимого href =»…» работает, только если в строке есть ровно одна ссылка href. Если их два или более, ваш (.*)
будет соответствовать всем остальным вплоть до последней ссылки href. Вы должны использовать что-то вроде href="([^"]*)"
, соответствующее «любому количеству недвойственных ссылок, за которыми следует двойная ссылка».
Ответ №2:
Заключите ваши переменные в кавычки, как в:
pageurl='the url'
PAGE=$(curl -sL "$pageurl")
FILE_URL=$(echo "$PAGE" | sed -e 's/^.*<a href="(.*)">(.*) alt="File" /></a>.*$/1/')
В противном случае произойдет расширение оболочки. Ошибка «option -: неизвестно» появляется в заключительной части:
An-Beat - Mentally Insine
Поскольку вы не заключили его в кавычки, он был проанализирован как аргументы, что вы можете ясно видеть в коде с подсветкой синтаксиса.