Voglio verificare se un sito web è su o giù in una particolare istanza utilizzando PHP. Sono venuto a sapere che arricciatura recupererà il contenuto del file ma non voglio leggere il contenuto del sito web. Voglio solo controllare lo stato del sito web. C'è un modo per controllare lo stato del sito? Possiamo usare il ping per controllare lo stato? Per me è sufficiente ottenere i segnali di stato come (404, 403, ecc.) Dal server. Un piccolo frammento di codice potrebbe aiutarmi molto.curl e ping - come verificare se un sito web è su o giù?
risposta
qualcosa come questo dovrebbe funzionare
$url = 'yoururl';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200==$retcode) {
// All's well
} else {
// not so much
}
Preferisco anche impostare 'CURLOPT_CONNECTTIMEOUT' e' CURLOPT_TIMEOUT' per abbassare i valori. – machineaddict
@machineaddict Vuoi dire "sito offline" invece di aspettare la connessione? Non vedo la differenza tra controllare 2 volte per una cosa e aspettare un po 'per l'operazione corrente. – erm3nda
@machineaddict Anche se CURLOPT_FOLLOWLOCATION è impostato su true, restituisce comunque un codice di ritorno 301 ... Com'è possibile? –
Hai visto la funzione get_headers()? http://it.php.net/manual/en/function.get-headers.php. Sembra fare esattamente quello che ti serve.
Se si utilizza il ricciolo direttamente con il flag -I, restituirà le intestazioni HTTP (404 ecc.) Anziché il codice HTML della pagina. In PHP, l'equivalente è l'opzione curl_setopt($ch, CURLOPT_NOBODY, 1);
.
ping
non farà quello che stai cercando - ti dirà solo se la macchina è attiva (e risponde a ping
). Ciò non significa necessariamente che il server web sia attivo, comunque.
Si potrebbe provare a utilizzare il metodo http_head: recupererà le intestazioni che il server Web invia all'utente. Se il server sta rinviando le intestazioni, allora sai che è attivo e funzionante.
Questo hyperlink incorporato http://ca.php.net/http_head reindirizza a http://ca.php.net/manual-lookup.php?pattern=http_head&lang=en&scope=404quickref che il seguente messaggio: *** http_head * * non esiste Partite più vicine: *. La risposta deve essere modificata per contenere il riferimento corretto. –
Non è possibile testare un server Web con ping
, perché è un servizio diverso. Il server potrebbe essere in esecuzione, ma il daemon webserver potrebbe essere arrestato in ogni caso. Quindi Curl è tuo amico. Ignora semplicemente il contenuto.
function checkStatus($url) {
$agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; pt-pt) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27";
// initializes curl session
$ch = curl_init();
// sets the URL to fetch
curl_setopt($ch, CURLOPT_URL, $url);
// sets the content of the User-Agent header
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
// make sure you only check the header - taken from the answer above
curl_setopt($ch, CURLOPT_NOBODY, true);
// follow "Location: " redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// disable output verbose information
curl_setopt($ch, CURLOPT_VERBOSE, false);
// max number of seconds to allow cURL function to execute
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
// execute
curl_exec($ch);
// get HTTP response code
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpcode >= 200 && $httpcode < 300)
return true;
else
return false;
}
// how to use
//===================
if ($this->checkStatus("http://www.dineshrabara.in"))
echo "Website is up";
else
echo "Website is down";
exit;
curl -Is $url | grep HTTP | cut -d ' ' -f2
Quando si fornisce il codice che risolve il problema, è meglio anche dare almeno una breve spiegazione di come funziona in modo che la lettura della gente non debba analizzarla mentalmente per linea per capire le differenze. – Fluffeh
Ecco come ho fatto. Ho impostato l'agente utente per ridurre al minimo la possibilità che il target mi bannasse e disabilitato la verifica SSL poiché conosco il target:
private static function checkSite($url) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // do not return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_USERAGENT => $useragent, // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 2, // timeout on connect (in seconds)
CURLOPT_TIMEOUT => 2, // timeout on response (in seconds)
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_SSL_VERIFYPEER => false, // SSL verification not required
CURLOPT_SSL_VERIFYHOST => false, // SSL verification not required
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($httpcode == 200);
}
- 1. Come verificare se un servizio web è attivo e funzionante senza utilizzare il ping?
- 2. Verifica se il sito web è contattabile
- 3. Come aggiornare un sito Web senza farlo andare giù?
- 4. Come verificare se un'immagine è stata trovata su un sito web?
- 5. Verificare se CURL è installato localmente?
- 6. Come verificare se un utente è online in un sito Web con database basati su php e mysql?
- 7. Come verificare con Selenium WebDriver se un sito utilizza Ajax?
- 8. Come si controlla se un sito Web è online in C#?
- 9. Come verificare se il ping ha risposto o meno in un file batch
- 10. come verificare se l'arricciatura è attivato o disattivato
- 11. Come verificare se il mio progetto è un sito Web o una webapp in Visual Studio 2012?
- 12. Verifica se il sito web esiste
- 13. Qual è il modo migliore per verificare se un sito web è attivo o meno tramite JavaScript
- 14. Misurazione su un sito web
- 15. Come scoprire se un URL è un sito di e-commerce o non e-commerce, programmaticamente?
- 16. Come verificare se ScrollView è scorrevole
- 17. Come verificare se un JSONObject è nullo o inesistente
- 18. Come utilizzare AppCMD per testare e verificare se esiste un sito Web in IIS7 utilizzando il nome del sito?
- 19. Come verificare se un int non è nullo o vuoto?
- 20. Come ospitare un sito Web JSP su un server web?
- 21. Verificare se IIS è installato o no?
- 22. Come posso sapere se Flash è caricato su un sito Web?
- 23. è "ab" o "httperf" migliore per verificare le prestazioni di un sito web?
- 24. Come verificare se un array multidimensionale è vuoto o no?
- 25. Come posso verificare se useragent è un ipad o un iphone?
- 26. Come verificare una stringa se è un ASCII o no?
- 27. Come verificare se un Datatable è Null o Nothing
- 28. Come posso verificare se un file è o meno un'immagine?
- 29. Come verificare se un testo è presente su una pagina Web utilizzando il selenio 2?
- 30. cosa significa "curl -e` o" curl --referer "?
Come si definisce 'up'? Una pagina vuota che restituisce HTTP '200' è attiva? – webbiedave
@Nate: Grazie per la tua modifica! – brainless