ricciolo: scaricare da URL dinamico
-
23-09-2019 - |
Domanda
Sto cercando di scaricare un file html con l'arricciatura in bash. Come nel sito: http://www.registrar.ucla.edu/ calendario / detselect.aspx? termsel = 10S & subareasel = FISICA & idxcrs = 0001B +++
Quando scarico manualmente, funziona benissimo. Tuttavia, quando provo e faccio funzionare il mio script attraverso crontab, il file HTML di output è molto piccolo e dice solo "Oggetto spostato qui." con un collegamento interrotto. Questo ha qualcosa a che fare con l'ambiente radi i comandi crontab eseguirlo? Ho trovato questa domanda:
php ricciolo SSL: oggetto spostato errore
, ma sto usando bash, non php. Quali sono le opzioni da riga di comando equivalente o variabili per impostare per risolvere questo problema in bash?
(che voglio fare questo con l'arricciatura, non wget)
Edit: bene, a volte il download manualmente (tramite shell interattiva) funziona, ma a volte non (ho ancora ottenere il "oggetto spostato qui" messaggio). Quindi non può essere un un specificamente essere un problema con l'ambiente di cron, ma con l'arricciatura stessa.
l'entrata 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
Modifica: Problema risolto. Il problema era che le tag randagi nell'URL. E 'stato perché stavo facendo sed s,"<URL>",\""$url"\", template.txt > test.sh
per generare gli script e sed sostituito tutte le istanze di &
con regolare <URL>
espressione. Dopo aver fissato l'url, ricciolo funziona bene.
Soluzione
Si desidera l'opzione -L
o --location
, che segue serie 300 reindirizza. --maxredirs [n]
limiterà curl per n
redirect.
Il suo curioso che questo funziona da una shell interattiva. Stai recuperano lo stesso URL? Si può sempre provare di sourcing vostri script di ambiente nel vostro ingresso cron:
* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...
Modifica l'esempio url è un po 'diverso da quello nello script. $url
nello script ha una coppia aggiuntiva di tag <URL>
. La loro sostituzione con &
, i separatori di argomenti convenzionali per le richieste GET
, funziona per me.
Altri suggerimenti
Senza vedere lo script è difficile indovinare che cosa sta succedendo, ma è probabile che si tratta di un problema ambientale, come si intuisce.
Una cosa che spesso aiuta è specificare il percorso completo eseguibili ei file nello script.
Se si mostra lo script e l'entrata crontab, possiamo essere di maggiore aiuto.