Λήψη μόνο κεφαλίδας απόκρισης από το HTTP POST χρησιμοποιώντας περιστροφή

Κάποιος μπορεί να ζητήσει μόνο τις κεφαλίδες χρησιμοποιώντας HTTP HEAD ως επιλογή -I σε curl(1).

$ curl -I /

Τα μακροχρόνια όργανα απόκρισης HTML είναι ένας πόνος για να μπείτε στην γραμμή εντολών, οπότε θα ήθελα να λάβω μόνο την κεφαλίδα ως ανατροφοδότηση για τα αιτήματά μουPOST. Ωστόσο, τα HEAD και POST είναι δύο διαφορετικές μέθοδοι.

Πώς μπορώ να αποκτήσω μπούκλα για να εμφανίσω μόνο κεφαλίδες απόκρισης σε ένα ερώτημα POST;

Jonathan Allard
-D, --dump-header <file>
       Write the protocol headers to the specified file.

       This  option  is handy to use when you want to store the headers
       that a HTTP site sends to you. Cookies from  the  headers  could
       then  be  read  in  a  second  curl  invocation by using the -b,
       --cookie option! The -c, --cookie-jar option is however a better
       way to store cookies.


-S, --show-error
       When used with -s, --silent, it makes curl show an error message if it fails.


      (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response
      code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from  all  requested
      pages  will  be  shown.  When authentication is used, curl only sends its credentials to the initial Host. If a redirect takes curl to a different
      Host, it won’t be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to
      follow by using the --max-redirs option.

      When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP
      response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following  request  using  the  same  unmodified

από τη σελίδα man. Έτσι

curl -sSL -D - -o /dev/null

ακολουθεί τις ανακατευθύνσεις, σκουπίζει τις κεφαλίδες στο stdout και στέλνει τα δεδομένα στο/dev/null (αυτό είναι ένα GET, όχι ένα POST, αλλά μπορείτε να κάνετε το ίδιο πράγμα με έναPOST που ήδη χρησιμοποιούν για δεδομένα POSTing)

σημειώστε τον - μετά τον -D που δηλώνει ότι το αρχείο "output" είναι stdout.

andrew cooke

Στις άλλες απαντήσεις απαιτείται η λήψη του φορέα απάντησης. Υπάρχει όμως ένας τρόπος για να κάνουμε ένα αίτημαPOST που θα ανακτήσει μόνο την κεφαλίδα:

curl -s -I -X POST

Ένας -I από μόνος του εκτελεί ένα αίτημα HEAD το οποίο μπορεί να αντικατασταθεί από το -X POST για να εκτελέσει ένα POST (ή οποιοδήποτε άλλο) αίτημα και να πάρει μόνο τα δεδομένα κεφαλίδας.


Η ακόλουθη εντολή εμφανίζει επιπλέον πληροφορίες

curl -X POST -vvv > /dev/null

Μπορείτε να ζητήσετε από τον διακομιστή να στείλει μόνο HEAD, αντί για πλήρη απάντηση

curl -X HEAD -I

Note: Οι σωστά διαμορφωμένοι/προγραμματισμένοι διακομιστές ιστού θα ανταποκριθούν διαφορετικά από την ανάρτηση, επειδή πρόκειται για ένα ερώτημα HEAD που δεν ζητά POST. Αλλά λειτουργεί τις περισσότερες φορές


Για τα μακρά σώματα αντίδρασης (και διάφορες άλλες παρόμοιες καταστάσεις), η λύση που χρησιμοποιώ είναι πάντα να διοχετεύω less, έτσι

curl -i | less


curl -s -D - | less

θα κάνει τη δουλειά.


Πολύ πιο εύκολο - αυτό είναι που χρησιμοποιώ για να αποφύγετε την παρακολούθηση Shortlink - είναι το ακόλουθο:

curl -IL

... που ακολουθεί επίσης συνδέσμους .


Ενώ οι άλλες απαντήσεις δεν έχουν δουλέψει για μένα σε όλες τις καταστάσεις, η καλύτερη λύση που θα μπορούσα να βρω (που δουλεύει με POST επίσης), από εδώ :

curl -vs '' 1> /dev/null

Daniel A. R. Werner

Ίσως είναι λίγο ακραίο, αλλά χρησιμοποιώ αυτή τη σύντομη έκδοση:

curl -svo. <URL>


-v εκτυπώστε τις πληροφορίες εντοπισμού σφαλμάτων (που περιλαμβάνουν κεφαλίδες)

-o. στέλνει δεδομένα ιστοσελίδας (τα οποία θέλουμε να αγνοήσουμε) σε ένα συγκεκριμένο αρχείο, . σε αυτή την περίπτωση, το οποίο είναι ένας κατάλογος και είναι ένας μη έγκυρος προορισμός και κάνει την έξοδο να αγνοηθεί.

-s καμία γραμμή προόδου, καμία πληροφορία σφάλματος (διαφορετικά θα δείτε Warning: Failed to create the file .: Is a directory)