ondulação:baixando de url dinâmico
-
23-09-2019 - |
Pergunta
Estou tentando baixar um arquivo html com curl no bash.Curta este site:http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++
Quando faço o download manualmente, funciona bem.No entanto, quando tento executar meu script através do CRONTAB, o arquivo HTML de saída é muito pequeno e apenas diz "Objeto movido para aqui". com um link quebrado.Isso tem algo a ver com o ambiente esparso em que os comandos crontab o executam?Encontrei esta pergunta:
phpssl curl:erro de objeto movido
mas estou usando bash, não php.Quais são as opções ou variáveis de linha de comando equivalentes a serem definidas para corrigir esse problema no bash?
(Eu quero fazer isso com curl, não com wget)
Editar:bem, às vezes o download do arquivo manualmente (via shell interativo) funciona, mas às vezes não (ainda recebo a mensagem "Objeto movido para cá").Portanto, pode não ser um problema específico com o ambiente do cron, mas com o próprio curl.
a entrada do cron:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1
teste.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
Editar:Problema resolvido.O problema eram as tags perdidas no URL.Foi porque eu estava fazendo sed s,"<URL>",\""$url"\", template.txt > test.sh
para gerar os scripts e sed substituiu todas as instâncias de &
com a expressão regular <URL>
.Depois de corrigir o URL, o curl funciona bem.
Solução
Você quer o -L
ou --location
opção, que segue redirecionamentos da série 300. --maxredirs [n]
limitará a ondulação a n
redirecionamentos.
É curioso que isso funcione a partir de um shell interativo.Você está buscando o mesmo URL?Você sempre pode tentar obter os scripts do seu ambiente na sua entrada cron:
* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...
EDITAR: o URL do exemplo é um pouco diferente daquele do script. $url
no script tem um par adicional de <URL>
Tag.Substituindo-os por &
, os separadores de argumentos convencionais para GET
pedidos, funciona para mim.
Outras dicas
Sem ver o seu script, é difícil adivinhar exatamente o que está acontecendo, mas é provável que seja um problema ambiental, como você supõe.
Uma coisa que geralmente ajuda é especificar o caminho completo para executáveis e arquivos em seu script.
Se você mostrar seu script e entrada do crontab, poderemos ajudar mais.