Bagaimana cara menentukan status HTTP tanpa mengunduh halaman lengkap?


26

Saya ingin tahu Status HTTP dari situs web yang menggunakan Ubuntu. Saya telah menggunakan curldan wgetmemerintahkan untuk tujuan itu. Tetapi masalahnya adalah perintah-perintah ini mengunduh halaman situs web lengkap dan kemudian mencari header dan menampilkannya di layar. Sebagai contoh:

$ 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

Hal yang sama terjadi dengan Wgetperintah ketika halaman lengkap diunduh dan menghabiskan bandwidth saya secara tidak perlu.

Apa yang saya cari adalah: cara mendapatkan kode status HTTP tanpa benar-benar mengunduh halaman apa pun sehingga saya dapat menghemat konsumsi bandwidth saya. Saya telah mencoba menggunakan curl tetapi tidak yakin apakah saya mengunduh halaman lengkap atau hanya tajuk ke sistem saya untuk mendapatkan kode status.


"Mencoba menggunakan curl tetapi tidak yakin apakah saya mengunduh halaman lengkap atau hanya sebuah header" - curl -v( --verbose) opsi adalah cara praktis untuk men-debug curl apa yang sebenarnya dikirim & terima.
Beni Cherniavsky-Paskin

Saya khawatir saya downvoting karena Anda sudah punya solusi di sana dalam pertanyaan.
Lightness Races dengan Monica

@LightnessRacesinOrbit Saya tidak tahu apakah pertanyaan itu adalah jawaban saya atau tidak. Saya di sini untuk membantu mengatasi kebingungan saya. Jika Anda masih menemukan bahwa pertanyaan saya salah .. Saya menyambut keputusan Anda untuk downvote .. terima kasih
Jaffer Wilson


"perintah-perintah ini unduh halaman situs web yang lengkap" - tidak, mereka tidak
Stop Harming Monica

Jawaban:


49

curl -Ihanya mengambil header HTTP; itu tidak mengunduh seluruh halaman. Dari 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.

Pilihan lain adalah menginstal lynxdan menggunakan lynx -head -dump.

Permintaan HEAD ditentukan oleh protokol 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.

2
apakah mungkin (dalam batas standar .. jelas itu mungkin ) untuk permintaan HEAD untuk mengembalikan kode status yang berbeda dari GET?
KutuluMike

1
@KutuluMike: Diedit jawaban untuk memberikan informasi yang diminta. Dalam kata-kata RFC, itu HARUS memberikan metainformation yang sama.
AlexP

@duskwuff: Lalu permintaan KEPALA HARUS mengembalikan
405 yang

@AlexP Kesalahan saya. Sudahlah!
duskwuff

18

Dengan wget, Anda harus menggunakan --spideropsi untuk mengirim permintaan HEAD seperti 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.

Jangan Anda pikir teman saya bahwa wget akan mengambil halaman lengkap dan kemudian menampilkan header.
Jaffer Wilson

@ JafferWilson membaca beberapa baris terakhir dari output.
muru
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.