Jak ustalić status HTTP bez pobierania całej strony?

26

Chcę poznać status HTTP stron internetowych korzystających z Ubuntu. Użyłem curli wgetrozkazałem w tym celu. Problem polega jednak na tym, że te polecenia pobierają całą stronę internetową, a następnie wyszukują nagłówek i wyświetlają go na ekranie. Na przykład:

$ 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

To samo dzieje się z Wgetpoleceniem, w którym pobierana jest cała strona i niepotrzebnie zużywa moją przepustowość.

To, czego szukam, to: jak uzyskać kod stanu HTTP bez pobierania żadnej strony, dzięki czemu mogę zaoszczędzić zużycie przepustowości. Próbowałem użyć curl, ale nie jestem pewien, czy pobieram całą stronę lub tylko nagłówek do mojego systemu, aby uzyskać kod stanu.

Jaffer Wilson
źródło
„Próbowałem użyć curl, ale nie jestem pewien, czy pobieram całą stronę czy tylko nagłówek” - Opcja curl -v( --verbose) jest przydatnym sposobem na debugowanie, co curl faktycznie wysyła i odbiera.
Beni Cherniavsky-Paskin
Obawiam się, że przegłosowałem, ponieważ masz już rozwiązanie tego pytania.
Lekkość ściga się z Moniką
@LightnessRacesinOrbit Nie wiedziałem, czy pytanie jest moją odpowiedzią, czy nie. Byłem tutaj, aby pomóc mi rozwiązać moje zamieszanie. Jeśli nadal uważasz, że moje pytanie jest błędne .. Cieszę się z twojej decyzji o przegłosowaniu .. dziękuję
Jaffer Wilson
„te polecenia pobierają całą stronę internetową” - nie, nie robią
Przestań szkodzić Monice

Odpowiedzi:

49

curl -Ipobiera tylko nagłówki HTTP; nie pobiera całej strony. Od 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.

Inną opcją jest instalacja lynxi używanie lynx -head -dump.

Żądanie HEAD jest określone przez protokół 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
źródło
2
czy jest możliwe (w granicach standardu… oczywiście jest to możliwe ), aby żądanie HEAD zwróciło inny kod statusu niż GET?
KutuluMike,
1
@KutuluMike: Edytowano odpowiedź, aby podać wymagane informacje. Zgodnie ze słowami RFC POWINIEN zapewniać tę samą metainformację.
AlexP
@duskwuff: Wtedy żądanie HEAD POWINIEN zwrócić ten sam numer 405.
AlexP
@AlexP Mój błąd. Nieważne!
duskwuff
18

Dzięki wget, trzeba korzystać z --spideropcji , aby wysłać żądanie głową jak 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
źródło
Nie sądzę, że mój przyjaciel, że wget pobierze całą stronę, a następnie wyświetli nagłówek.
Jaffer Wilson
@JafferWilson przeczytał kilka ostatnich wierszy wyniku.
muru