2010-05-27 6 views
48

Sto cercando di creare un programma in grado di convertire una serie di scansioni di manga in un unico file PDF e non voglio cercare di scaricare l'immagine per determinare se ho l'URL corretto. Esiste un comando di script di shell che posso usare per verificare se esiste una pagina Web?Come determinare se esiste una pagina Web con script di shell?

+0

Quale shell? Shell UNIX? Prompt dei comandi di Windows? Windows PowerShell? – zneak

+0

UNIX, presumo, perché ha un tag unix. – thepiercingarrow

risposta

87

Sotto un * NIX, è possibile utilizzare curl di emettere una semplice richiesta HEAD (HEAD chiede solo per le intestazioni, non il corpo della pagina):

curl --head http://myurl/ 

allora si può prendere solo la prima riga, che contiene il codice di stato HTTP (200 OK, 404 Not Found, ecc):

curl -s --head http://myurl/ | head -n 1 

e quindi controllare se hai una risposta decente (codice di stato è 200 o 3 **):

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].." 

Questo emetterà la prima riga se il codice di stato è ok, o nulla se non lo è. È possibile anche che il tubo a/dev/null per ottenere nessuna uscita, e utilizzare $? per determinare se ha funzionato o no:

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null 
# on success (page exists), $? will be 0; on failure (page does not exist or 
# is unreachable), $? will be 1 

EDIT-s dice semplicemente curl di non mostrare una "barra di avanzamento".

+3

Per fare ciò con una minore analisi delle stringhe e per controllare i reindirizzamenti su pagine non esistenti, usare 'curl --silent --head --location --output/dev/null --write-out '% {http_code}' http://en.wikipedia.org/wiki/tla | grep '^ 2'' – bukzor

+3

Usa --fail: http://stackoverflow.com/a/12199125/376366 –

+0

Script per automatizzare la convalida di un numero di file: https://gist.github.com/igilham/12eb33ab8a86f1e815d2 – IanGilham

-2

wget o cURL farà il lavoro. Vedi qui wget o cURL per dettagli e posizioni di download. Fornire l'URL a questi strumenti da riga di comando e controllare la risposta.

+0

Pfff ... perché i downvotes (senza spiegazione, intendiamoci) se la risposta è corretta, breve e informativo? –

+1

Non ho votato, ma se dovessi indovinare, è perché le risposte solo per l'URL sono [scoraggiate] (https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain- link-altrove-davvero-good-risposte). – zneak

+0

Grazie. TBH, la domanda era "Esiste un comando di shell scripting che posso usare per controllare se esiste una pagina web?" e la mia risposta è stata "wget ​​o cURL farà il lavoro", oltre a collegamenti a ciascun comando e una spiegazione che la risposta di tali invocazioni di comando potrebbe essere verificata. Questa non è una risposta solo per URL, in alcun modo, ed era tanto informativa quanto l'altra risposta (revisione) che era in quel momento: https://stackoverflow.com/revisions/2924444/1. Ahimè, a quanto pare una brutta giornata di karma :-) –

17

Utilizzare cURL per ottenere il codice di stato e verificare i valori richiesti.

status=$(curl -s --head -w %{http_code} http://www.google.com/ -o /dev/null) 
echo $status 
8

Prima verificare che non v'è alcuna autorizzazione issue.If qualsiasi richiesta l'autorizzazione, è necessario fornire il nome utente e la password .Create un file di script di shell (checkURL.sh) e incolla il codice qui sotto.

Spero che questo ti possa aiutare.

checkURL.sh

yourURL="http://abc-repo.mycorp.com/data/yourdir" 

if curl --output /dev/null --silent --head --fail "$yourURL" 
then 
    echo "This URL Exist" 
else 
    echo "This URL Not Exist" 
fi 

Il suo lavoro per me in Nexus e altri repository.

1

È sempre possibile utilizzare solo wget; Faccio come il codice è più semplice.

if [[ $(wget http://url/ -O-) ]] 2>/dev/null 
    then echo "This page exists." 
    else echo "This page does not exist." 
fi 

Utilizzando l'opzione -O- con wget significa che cercherà di uscita il contenuto della pagina, ma solo se esiste. Quindi se non c'è alcun output, la pagina non esiste. Lo 2>/dev/null è solo per inviare l'output (se ce n'è uno) al cestino.

So che è in ritardo, ma spero che questo aiuti.

Problemi correlati