2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

curlでhttpヘッダをごにょごにょする

Last updated at Posted at 2019-06-02

httpのレスポンスヘッダに項目追加される案件をやったので、これを確認する手順を調べた。

1.curl

curlを使うと、リクエストヘッダ、レスポンスヘッダを見ることができる。

$ curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only
....
 -D, --dump-header FILE  Write the received headers to FILE
 -L, --location      Follow redirects (H)
     --location-trusted  Like '--location', and send auth to other hosts (H)
 -o, --output FILE   Write to FILE instead of stdout
 -v, --verbose       Make the operation more talkative
 -i, --include       Include protocol headers in the output (H/F)

curlコマンド例

  • -v で、リクエストヘッダ、レスポンスヘッダが標準エラーに出力されれるので、 2> HEADER.txt でリダイレクトして、ファイルに出力する。
  • -o BODY.html で<html>〜</html>をファイルに出力する。
  • -i ヘッダを出力ファイルに含める。
curl -L http://www.sample.com -v -o BODY.html 2> HEADER.txt

結果:リクエスト、レスポンスのやりとり

    • : curl自体の出力のようです。
  • : リクエスト

  • < : レスポンス
HEADER.txt
* Rebuilt URL to: www.nttdata.co.jp/
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 210.227.41.5...
* TCP_NODELAY set
* Connected to www.nttdata.co.jp (210.227.41.5) port 80 (#0)
> GET / HTTP/1.1
> Host: www.nttdata.co.jp
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Sun, 02 Jun 2019 05:10:20 GMT
< Server: Apache
< Location: http://www.nttdata.com/jp/ja/
< Content-Length: 237
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
< Set-Cookie: server-20480-%3Fmntdlb01%3Fsfarm-web_ap=ECBBGDAKFAAA; Path=/
< 
  0   237    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 0
* Issue another request to this URL: 'http://www.nttdata.com/jp/ja/'
*   Trying 2600:140b:b000:181::1962...
* TCP_NODELAY set
* Connected to www.nttdata.com (2600:140b:b000:181::1962) port 80 (#1)
> GET /jp/ja/ HTTP/1.1
> Host: www.nttdata.com
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Server: AkamaiGHost
< Content-Length: 0
< Location: https://www.nttdata.com/jp/ja/
< Expires: Sun, 02 Jun 2019 05:10:20 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Sun, 02 Jun 2019 05:10:20 GMT
< Connection: keep-alive
< 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Connection #1 to host www.nttdata.com left intact
* Issue another request to this URL: 'https://www.nttdata.com/jp/ja/'
*   Trying 2600:140b:b000:181::1962...
* TCP_NODELAY set
* Connected to www.nttdata.com (2600:140b:b000:181::1962) port 443 (#2)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [221 bytes data]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [108 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [2725 bytes data]
.... httpsの認証MSGは割愛 .....
*  SSL certificate verify ok.
> GET /jp/ja/ HTTP/1.1
> Host: www.nttdata.com
> User-Agent: curl/7.54.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Server: Microsoft-IIS/8.5
< X-Frame-Options: SAMEORIGIN
< Content-Length: 62605
< Expires: Sun, 02 Jun 2019 05:10:21 GMT
< Cache-Control: max-age=0, no-cache, no-store
< Pragma: no-cache
< Date: Sun, 02 Jun 2019 05:10:21 GMT
< Connection: keep-alive
< Set-Cookie: ASP.NET_SessionId=oaainwvmb0ucpqa15cwqtlbn; path=/; HttpOnly
< Set-Cookie: SC_ANALYTICS_GLOBAL_COOKIE=66b3e38b1f5f478794fcb222791bb555|False; expires=Wed, 30-May-2029 05:10:20 GMT; path=/; HttpOnly
< Set-Cookie: GlobalGeoipRedirection=0; expires=Tue, 02-Jul-2019 05:10:21 GMT; path=/
< Set-Cookie: StayonGlobal=0; expires=Tue, 02-Jul-2019 05:10:21 GMT; path=/
< 
{ [1479 bytes data]
100 62605  100 62605    0     0  85161      0 --:--:-- --:--:-- --:--:-- 94284
* Connection #2 to host www.nttdata.com left intact

結果:html本体

BODY.html
<!DOCTYPE html>
<html lang="">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="format-detection" content="telephone=no">
    <link rel="shortcut icon" type="image/png" href="/assets/NTTDataJapan/css/i/favicon.png" />
    <link rel="apple-touch-icon-precomposed" type="image/png" href="/assets/NTTDataJapan/css/i/apple-touch-icon-precomposed.png">
....
<title>NTTデータ公式サイト</title>
<meta name="keywords" content=""/>
<meta name="description" content="NTTデータのWebサイトです。NTTデータがご提供し
ているサービスやソリューション、企業情報をご紹介しています。"/>
<meta name="google-site-verification" content="VIoqwbIi3FYycYilvfYVFscme98AO2mV10D1RXdU8P4" />
....
</head>
<body>
    <div class="emea-ntt">
            <div class="left-main-menu primary-menu-component slider">
        <div class="submenu-holder">
....
</body>
</html>

2.curlでtraceする。おすすめ。

http通信全体がトレース取得される。
参考

$ curl -L www.nttdata.co.jp --trace-ascii trace.log -o body.html
trace.logにトレースログが出力され、body.htmlに<html>...</html>が出力される。

3.telnetで80番ポートを叩く

 telnetへの入力は緑、応答は白。

port80でtelnet


$ telnet www.nttdata.co.jp 80

Trying 210.227.41.5...
Connected to www.nttdata.co.jp.
Escape character is '^]'.

GET(/)


GET / HTTP/1.1
Host: www.nttdata.co.jp
Accept: /
(空エンター)

帰ってきたレスポンス

HTTP/1.1 301 Moved Permanently
Date: Sun, 02 Jun 2019 05:29:38 GMT
Server: Apache
Location: http://www.nttdata.com/jp/ja/
Content-Length: 237
Connection: close
Content-Type: text/html; charset=iso-8859-1
Set-Cookie: server-20480-%3Fmntdlb01%3Fsfarm-web_ap=EBBBGDAKFAAA; Path=/

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.nttdata.com/jp/ja/">here</a>.</p>
</body></html>
Connection closed by foreign host.

別のロケーションへ再度リクエスト

HTTP/1.1 301 Moved Permanently、と移動されたと応答があったので、そこへリクエスト。


$ telnet www.nttdata.co.jp 80

Trying 210.227.41.5...
Connected to www.nttdata.co.jp.
Escape character is '^]'.

get(/jp/ja/)


GET /jp/ja/ HTTP/1.1
Host: www.nttdata.com
Accept: /
(空エンター)

帰ってきたレスポンス。HTTP/1.1 200 OKとなり、表示される。

HTTP/1.1 200 OK
Date: Sun, 02 Jun 2019 05:31:43 GMT
Server: Apache
Last-Modified: Mon, 25 Feb 2019 07:15:45 GMT
Accept-Ranges: bytes
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
Set-Cookie: server-20480-%3Fmntdlb01%3Fsfarm-web_ap=EBBBGDAKFAAA; Path=/

172
<!doctype html>
<!--[if lt IE 7]><html class="no-js ie6 oldie" lang="ja"><![endif]-->
<!--[if IE 7]><html class="no-js ie7 oldie" lang="ja"><![endif]-->
<!--[if IE 8]><html class="no-js ie8 oldie" lang="ja"><![endif]-->
<!--[if gt IE 8]><!--><html class="no-js" lang="ja"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>NTTデータ公式サイト</title>
.....
</body>
</html>

0

Connection closed by foreign host.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?