Комплекс Curl с Bash

#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
  

Поскольку вы не заключили его в кавычки, он был проанализирован как аргументы, что вы можете ясно видеть в коде с подсветкой синтаксиса.