Comment déterminer l'état HTTP sans télécharger la page complète?

26

Je veux connaître l'état HTTP des sites Web utilisant Ubuntu. J'ai utilisé curlet wgetcommandé à cette fin. Mais le problème est que ces commandes téléchargent la page complète du site Web, puis recherchent l'en-tête et l'affiche à l'écran. Par exemple:

$ curl -I trafficinviter.com
HTTP/1.1 200 OK
Date: Mon, 02 Jan 2017 14:13:14 GMT
Server: Apache
X-Pingback: http://trafficinviter.com/xmlrpc.php
Link: <http://trafficinviter.com/>; rel=shortlink
Set-Cookie: wpfront-notification-bar-landingpage=1
Content-Type: text/html; charset=UTF-8

La même chose se produit avec la Wgetcommande où la page complète est téléchargée et consomme inutilement ma bande passante.

Ce que je recherche, c'est: comment obtenir le code d'état HTTP sans télécharger aucune page pour économiser ma bande passante. J'avais essayé d'utiliser curl mais je ne sais pas si je télécharge la page complète ou juste un en-tête sur mon système pour obtenir le code d'état.

Jaffer Wilson
la source
"J'ai essayé d'utiliser curl mais je ne sais pas si je télécharge la page complète ou juste un en-tête" - curl -v( --verbose) L'option est un moyen pratique de déboguer ce que curl envoie et reçoit réellement.
Beni Cherniavsky-Paskin
Je crains de ne pas voter parce que vous avez déjà la solution juste là dans la question.
Courses de légèreté avec Monica le
@LightnessRacesinOrbit Je ne savais pas si la question était ma réponse ou non. J'étais ici pour avoir de l'aide pour résoudre ma confusion. Si vous trouvez toujours que ma question est fausse .. je salue votre décision de downvote .. merci
Jaffer Wilson
manpages.ubuntu.com/manpages/trusty/en/man1/curl.1.html
Courses de légèreté avec Monica
"ces commandes téléchargent la page complète du site Web" - non, elles ne le font pas
Stop Harming Monica

Réponses:

49

curl -Irécupère uniquement les en-têtes HTTP; il ne télécharge pas la page entière. Deman curl :

-I, --head
      (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature
      the command HEAD which this uses to get nothing but  the  header
      of  a  document. When used on an FTP or FILE file, curl displays
      the file size and last modification time only.

Une autre option est d'installer lynxet d'utiliserlynx -head -dump .

La demande HEAD est spécifiée par le protocole HTTP 1.1 ( RFC 2616 ):

9.4 HEAD

   The HEAD method is identical to GET except that the server MUST NOT
   return a message-body in the response. The metainformation contained
   in the HTTP headers in response to a HEAD request SHOULD be identical
   to the information sent in response to a GET request. This method can
   be used for obtaining metainformation about the entity implied by the
   request without transferring the entity-body itself. This method is
   often used for testing hypertext links for validity, accessibility,
   and recent modification.
AlexP
la source
2
est-il possible (dans les limites de la norme .. évidemment c'est possible ) pour une requête HEAD de retourner un code de statut différent d'un GET?
KutuluMike
1
@KutuluMike: modification de la réponse pour fournir les informations demandées. Selon les termes de la RFC, il DEVRAIT fournir la même métainformation.
AlexP
@duskwuff: Ensuite, une demande HEAD DEVRAIT retourner le même 405.
AlexP
@AlexP Mon erreur. Ça ne fait rien!
duskwuff
18

Avec wget, vous devez utiliser l' --spideroption pour envoyer une demande HEAD comme curl:

$ wget -S --spider https://google.com
Spider mode enabled. Check if remote file exists.
--2017-01-03 00:08:38--  https://google.com/
Resolving google.com (google.com)... 216.58.197.174
Connecting to google.com (google.com)|216.58.197.174|:443... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 302 Found
  Cache-Control: private
  Content-Type: text/html; charset=UTF-8
  Location: https://www.google.co.jp/?gfe_rd=cr&ei=...
  Content-Length: 262
  Date: Mon, 02 Jan 2017 15:08:38 GMT
  Alt-Svc: quic=":443"; ma=2592000; v="35,34"
Location: https://www.google.co.jp/?gfe_rd=cr&ei=... [following]
Spider mode enabled. Check if remote file exists.
--2017-01-03 00:08:38--  https://www.google.co.jp/?gfe_rd=cr&ei=...
Resolving www.google.co.jp (www.google.co.jp)... 210.139.253.109, 210.139.253.93, 210.139.253.123, ...
Connecting to www.google.co.jp (www.google.co.jp)|210.139.253.109|:443... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Date: Mon, 02 Jan 2017 15:08:38 GMT
  Expires: -1
  Cache-Control: private, max-age=0
  Content-Type: text/html; charset=Shift_JIS
  P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
  Server: gws
  X-XSS-Protection: 1; mode=block
  X-Frame-Options: SAMEORIGIN
  Set-Cookie: NID=...; expires=Tue, 04-Jul-2017 15:08:38 GMT; path=/; domain=.google.co.jp; HttpOnly
  Alt-Svc: quic=":443"; ma=2592000; v="35,34"
  Transfer-Encoding: chunked
  Accept-Ranges: none
  Vary: Accept-Encoding
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.
muru
la source
Ne pensez-vous pas que mon ami qui wget va récupérer la page complète puis afficher l'en-tête.
Jaffer Wilson
@JafferWilson a lu les dernières lignes de la sortie.
muru