2017-05-28 12 views
0

オプション:なぜ出力にカールが繰り返されますか?私が使用し

-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. 

-L, --location 
     (HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indi- 
     cated 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 method. 

     You can tell curl to not change the non-GET request method to GET after a 30x response by using the 
     dedicated options for that: --post301, --post302 and -post303. 

-v, --verbose 
     Be more verbose/talkative during the operation. Useful for debugging and seeing what's going on 
     "under the hood". A line starting with '>' means "header data" sent by curl, '<' means "header data" 
     received by curl that is hidden in normal cases, and a line starting with '*' means additional info 
     provided by curl. 

     Note that if you only want HTTP headers in the output, -i, --include might be the option you're 
     looking for. 

     If you think this option still doesn't give you enough details, consider using --trace or --trace- 
     ascii instead. 

     This option overrides previous uses of --trace-ascii or --trace. 

     Use -s, --silent to make curl quiet. 

を以下は私が思ったんだけど出力されます。リダイレクト(301)を含む応答では、すべてのヘッダーが2回表示されますが、重複の1つのみが<の前に表示されます。私はそれをどのように解釈すべきですか?

$ curl -ILv http://www.mail.com 

* Rebuilt URL to: http://www.mail.com/ 
* Trying 74.208.122.4... 
* Connected to www.mail.com (74.208.122.4) port 80 (#0) 
> HEAD/HTTP/1.1 
> Host: www.mail.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
< HTTP/1.1 301 Moved Permanently 
HTTP/1.1 301 Moved Permanently 
< Date: Sun, 28 May 2017 22:02:16 GMT 
Date: Sun, 28 May 2017 22:02:16 GMT 
< Server: Apache 
Server: Apache 
< Location: https://www.mail.com/ 
Location: https://www.mail.com/ 
< Vary: Accept-Encoding 
Vary: Accept-Encoding 
< Connection: close 
Connection: close 
< Content-Type: text/html; charset=iso-8859-1 
Content-Type: text/html; charset=iso-8859-1 

< 
* Closing connection 0 
* Issue another request to this URL: 'https://www.mail.com/' 
* Trying 74.208.122.4... 
* Connected to www.mail.com (74.208.122.4) port 443 (#1) 
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 
* Server certificate: *.mail.com 
* Server certificate: thawte SSL CA - G2 
* Server certificate: thawte Primary Root CA 
> HEAD/HTTP/1.1 
> Host: www.mail.com 
> User-Agent: curl/7.43.0 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
HTTP/1.1 200 OK 
< Date: Sun, 28 May 2017 22:02:16 GMT 
Date: Sun, 28 May 2017 22:02:16 GMT 
< Server: Apache 
Server: Apache 
< Vary: X-Forwarded-Proto,Host,Accept-Encoding 
Vary: X-Forwarded-Proto,Host,Accept-Encoding 
< Set-Cookie: cookieKID=kid%40autoref%40mail.com; Domain=.mail.com; Expires=Tue, 27-Jun-2017 22:02:16 GMT; Path=/ 
Set-Cookie: cookieKID=kid%40autoref%40mail.com; Domain=.mail.com; Expires=Tue, 27-Jun-2017 22:02:16 GMT; Path=/ 
< Set-Cookie: cookiePartner=kid%40autoref%40mail.com; Domain=.mail.com; Expires=Tue, 27-Jun-2017 22:02:16 GMT; Path=/ 
Set-Cookie: cookiePartner=kid%40autoref%40mail.com; Domain=.mail.com; Expires=Tue, 27-Jun-2017 22:02:16 GMT; Path=/ 
< Cache-Control: no-cache, no-store, must-revalidate 
Cache-Control: no-cache, no-store, must-revalidate 
< Pragma: no-cache 
Pragma: no-cache 
< Expires: Thu, 01 Jan 1970 00:00:00 GMT 
Expires: Thu, 01 Jan 1970 00:00:00 GMT 
< Set-Cookie: JSESSIONID=F0BEF03C92839D69057FFB57C7FAA789; Path=/mailcom-webapp/; HttpOnly 
Set-Cookie: JSESSIONID=F0BEF03C92839D69057FFB57C7FAA789; Path=/mailcom-webapp/; HttpOnly 
< Content-Language: en-US 
Content-Language: en-US 
< Content-Length: 85237 
Content-Length: 85237 
< Connection: close 
Connection: close 
< Content-Type: text/html;charset=UTF-8 
Content-Type: text/html;charset=UTF-8 

< 
* Closing connection 1 

答えて

1

ベスト推測:-vを指定すると、curlに冗長(デバッグ情報を送る)をSTDERRに伝えます。 -IでcurlにヘッダをSTDOUTにダンプするよう伝えます。デフォルトでは、シェルはSTDOUTとSTDERRを組み合わせています。 stdoutとstderrを分けて、あなたは混乱を避けるでしょう。

curl -ILv http://www.mail.com >stdout.log 2>stderr.log ; cat stdout.log

0

用途:cURLのは、verboseコマンドラインフラグで呼び出された場合

curl -ILv http://www.mail.com 2>&1 | grep '^[<>\*].*$' 

、それが標準エラー出力の代わりに、標準出力に詳細な出力を送信します。上記のコマンドはstderrをstdout(2> & 1)にリダイレクトし、結合出力をgrepにパイプし、上記正規表現を使用して*、<、または>で始まる行だけを返します。アウトプット内の他の行(あなたが最初に関係していたダプを含む)はすべて出力から削除されます。

+0

'-V'オプションを省略することの問題点は、カールが要求を表示しないということである - それが唯一の応答を表示します。私も同様にリクエストを見る必要がありました。 – 7stud

+0

上記の私の元の答えへの編集を参照してください。これは、あなたが到達しようとしていたところにあなたを連れて来るはずです。 cURL -vがstderrに出力を送信することは明らかではないので、stderrをstdoutにリダイレクトした後、grepを使用して出力をフィルタリングしました。追加の行出力が必要な場合は、正規表現を微調整することができます。 –

+0

ところで、hanshenrikの答えはかなり良いですが、ログファイルに出力してそれを処理する必要があります。上記で提供した1つのライナーは、ログファイルを開く必要がないようにすぐに必要な出力を得ます(同時実行でstdout.logファイルを実行せずに複数の要求を同時に実行できるようにします) –

関連する問題