Wie kann man den HTTP-Status ermitteln, ohne die gesamte Seite herunterzuladen?

26

Ich möchte den HTTP-Status der Websites mit Ubuntu erfahren. Ich habe zu diesem Zweck benutzt curlund wgetbefehle. Das Problem ist jedoch, dass diese Befehle die gesamte Webseite herunterladen und dann nach der Überschrift suchen und diese auf dem Bildschirm anzeigen. Beispielsweise:

$ 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

Dasselbe passiert mit dem WgetBefehl, bei dem die gesamte Seite heruntergeladen wird und unnötigerweise meine Bandbreite beansprucht.

Nach was ich suche, ist: wie man den HTTP-Statuscode erhält, ohne irgendeine Seite wirklich herunterzuladen, damit ich meinen Bandbreitenverbrauch speichern kann. Ich habe versucht, Curl zu verwenden, bin mir aber nicht sicher, ob ich eine vollständige Seite oder nur eine Kopfzeile auf mein System herunterlade, um den Statuscode zu erhalten.

Jaffer Wilson
quelle
"Ich habe versucht, Curl zu verwenden, bin mir aber nicht sicher, ob ich die komplette Seite oder nur einen Header herunterlade" - curl -v( --verbose) ist eine praktische Möglichkeit, um zu debuggen, was Curl tatsächlich sendet und empfängt.
Beni Cherniavsky-Paskin
Ich fürchte, ich stimme ab, weil Sie in der Frage bereits die richtige Lösung gefunden haben.
Leichtigkeit Rennen mit Monica
@LightnessRacesinOrbit Ich wusste nicht, ob die Frage meine Antwort ist oder nicht. Ich war hier, um meine Verwirrung zu lösen. Wenn Sie immer noch feststellen, dass meine Frage falsch ist, begrüße ich Ihre Entscheidung über die Ablehnung. Vielen Dank
Jaffer Wilson
"Diese Befehle laden die komplette Webseite herunter" - nein, tun sie nicht
Hören Sie auf, Monica am

Antworten:

49

curl -Iruft nur die HTTP-Header ab; Es wird nicht die gesamte Seite heruntergeladen. Von man 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.

Eine weitere Option ist die Installation lynxund Verwendung lynx -head -dump.

Die HEAD-Anforderung wird vom HTTP 1.1-Protokoll ( RFC 2616 ) angegeben:

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
quelle
2
ist es möglich , (innerhalb der Grenzen des Standard .. offensichtlich es ist möglich ) für eine HEAD - Anforderung eines anderen Statuscode als ein GET zurück?
KutuluMike
1
@KutuluMike: Die Antwort wurde bearbeitet, um die angeforderten Informationen bereitzustellen. In den Worten des RFC sollte es die gleiche Metainformation liefern.
AlexP
@ duskwuff: Dann sollte eine HEAD-Anfrage dieselbe 405 zurückgeben.
AlexP
@ AlexP Mein Fehler. Keine Ursache!
duskwuff
18

Mit wgetmüssen Sie die --spiderOption verwenden , um eine HEAD-Anfrage wie curl zu senden:

$ 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
quelle
Glaubst du nicht, dass mein Freund, der wget, die komplette Seite abruft und dann den Header anzeigt?
Jaffer Wilson
@JafferWilson hat die letzten Zeilen der Ausgabe gelesen.
Muru