Como determinar o status HTTP sem baixar a página completa?

26

Quero saber o status HTTP dos sites usando o Ubuntu. Eu usei curle wgetcomando para esse fim. Mas o problema é que esses comandos fazem o download da página completa do site e, em seguida, procure o cabeçalho e o exibe na tela. Por exemplo:

$ 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

O mesmo acontece com o Wgetcomando em que a página completa está sendo baixada e consumindo desnecessariamente minha largura de banda.

O que estou procurando é: como obter o código de status HTTP sem realmente fazer download de qualquer página para que eu possa economizar meu consumo de largura de banda. Eu tentei usar curl, mas não tenho certeza se estou baixando a página completa ou apenas um cabeçalho no meu sistema para obter o código de status.

Jaffer Wilson
fonte
"tentei usar curl, mas não tenho certeza se estou baixando a página completa ou apenas um cabeçalho" - curl -v( --verbose) é uma maneira útil de depurar qual curl está realmente enviando e recebendo.
Beni Cherniavsky-Paskin
Receio estar com uma votação baixa porque você já tem a solução ali na pergunta.
Lightness Races com Monica
@LightnessRacesinOrbit Eu não sabia se a pergunta é minha resposta ou não. Eu estava aqui para ter ajuda para resolver minha confusão. Se você ainda achar que a minha pergunta é errado .. Congratulo-me com a sua decisão de downvote .. obrigado
Jaffer Wilson
"esses comandos baixam a página completa do site" - não, eles não
Pare de prejudicar Monica

Respostas:

49

curl -Ibusca apenas os cabeçalhos HTTP; ele não baixa a página inteira. De 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.

Outra opção é instalar lynxe usar lynx -head -dump.

A solicitação HEAD é especificada pelo protocolo 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
fonte
2
é possível (dentro dos limites do padrão .. obviamente é possível ) que uma solicitação HEAD retorne um código de status diferente de um GET?
precisa saber é o seguinte
1
@KutuluMike: Editou a resposta para fornecer as informações solicitadas. Nas palavras do RFC, ele deve fornecer a mesma metainformação.
AlexP
@duskwuff: Então um pedido cabeça deve retornar o mesmo 405.
AlexP
@AlexP Meu erro. Deixa pra lá!
precisa saber é o seguinte
18

Com wget, você precisa usar a --spideropção para enviar uma solicitação HEAD como 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
fonte
Você não acha que meu amigo que o wget buscará a página completa e exibirá o cabeçalho?
perfil completo de Jaffer Wilson
@JafferWilson leu as últimas linhas da saída.
muru