curl: загрузка с динамического URL

Я пытаюсь загрузить html-файл с помощью curl в bash. Нравится этот сайт: http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++

Когда скачиваю вручную, работает нормально. Однако, когда я пытаюсь запустить свой скрипт через crontab, выходной html-файл очень мал и просто говорит: «Объект перемещен сюда». с неработающей ссылкой. Связано ли это с разреженной средой, которую запускают команды crontab? Я нашел такой вопрос:

php ssl curl: ошибка перемещения объекта

но я использую bash, а не php. Какие эквивалентные параметры или переменные командной строки необходимо установить для решения этой проблемы в bash?

(Я хочу сделать это с помощью curl, а не wget)

Изменить: ну, иногда загрузка файла вручную (через интерактивную оболочку) работает, но иногда нет (я все еще получаю сообщение «Объект перемещен сюда»). Так что проблема может быть не в среде cron, а в самом curl.

запись cron:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

test.sh:

#! /bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/sbin
cd ~/.class

course="physics 1b"
url="http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S<URL>subareasel=PHYSICS<URL>idxcrs=0001B+++"

curl "$url" -sLo "$course".html  --max-redirs 5

Изменить: проблема решена. Проблема заключалась в случайных тегах в URL-адресе. Это произошло потому, что я делал sed s,"<URL>",\""$url"\", template.txt > test.sh для генерации сценариев, а sed заменил все экземпляры & регулярным выражением <URL>. После исправления URL-адреса curl работает нормально.


person nightfire    schedule 31.03.2010    source источник


Ответы (2)


Вам нужен вариант -L или --location, который следует за перенаправлениями серии 300. --maxredirs [n] ограничит curl n перенаправлениями.

Любопытно, что это работает из интерактивной оболочки. Вы получаете тот же URL? Вы всегда можете попробовать найти сценарии среды в записи cron:

* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...

РЕДАКТИРОВАТЬ: пример URL несколько отличается от адреса в скрипте. $url в скрипте имеет дополнительную пару тегов <URL>. Замена их на &, обычные разделители аргументов для GET запросов, у меня работает.

person Patrick McMurchie    schedule 31.03.2010
comment
использование опции -L помогает, но не решает эту проблему. У него нет сообщения «Объект перемещен сюда», но на загружаемой странице просто есть сообщение об ошибке сайта - система в настоящее время недоступна или отключена, а не страница, которую она хочет. - person nightfire; 01.04.2010
comment
Да, я тестировал его с тем же URL. У меня нет файла .bashrc, я не знаю, поможет ли поиск сценариев среды .. - person nightfire; 01.04.2010
comment
Хороший улов, он несколько другой. Я использовал sed для замены URL-адреса в скрипт и не знал о поведении символа & в поле замены. Спасибо. - person nightfire; 01.04.2010

Не видя вашего сценария, трудно догадаться, что именно происходит, но, скорее всего, это проблема окружающей среды, как вы предполагаете.

Одна вещь, которая часто помогает, - это указать полный путь к исполняемым файлам и файлам в вашем скрипте.

Если вы покажете свой скрипт и запись в crontab, мы сможем вам больше помочь.

person Dennis Williamson    schedule 31.03.2010