curl: загрузка с динамического URL - PullRequest
2 голосов
/ 31 марта 2010

Я пытаюсь скачать 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 работает нормально.

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Требуется опция -L или --location, которая следует за перенаправлениями серии 300. --maxredirs [n] будет ограничивать скручивание до n перенаправлений.

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

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

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

0 голосов
/ 01 апреля 2010

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

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

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

...