前回の続きで、今回は、メソッド名とURLを受け取ってみる。telnetでアクセスする場合、一旦アクセス後入力待ちになり、そこで「GET /」みたいな入力をするので、それを真似てみる。

とりあえず、頭に入力待ちを入れてみる

/home/test/hoge.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh
read L

cat <<++EOS
HTTP/1.0 200 OK
Content-type: text/html


<title>test page</title>

<h1>Hello World!</h1>


++EOS

telnetからアクセス
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
% telnet 192.168.29.21 80
Trying 192.168.29.21...
Connected to 192.168.29.21.
Escape character is &#39;^]&#39;.

HTTP/1.0 200 OK
Content-type: text/html

&lt;html>
&lt;head>&lt;title>test page&lt;/title>&lt;/head>
&lt;body>
&lt;h1>Hello World!&lt;/h1>
&lt;/body>
&lt;/html>
Connection closed by foreign host.

1回入力待ちになった!


ブラウザからアクセス

URL:http://192.168.29.21/aaa/bbb/ccc

1
2
3
4
5
6
&lt;html>
&lt;head>&lt;title>test page&lt;/title>&lt;/head>
&lt;body>
&lt;h1>Hello World!&lt;/h1>
&lt;/body>
&lt;/html>

特にかわりなし。


入力待ちのときの引数を表示してみる

/home/test/hoge.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/sh
read L

cat &lt;&lt;++EOS
HTTP/1.0 200 OK
Content-type: text/html


<title>test page</title>

<h1>Hello World!</h1>
<p>params:</p>$L<p></p>


++EOS

telnetからアクセス

「GET /aaa/bbb/ccc」を入力

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
% telnet 192.168.29.21 80
Trying 192.168.29.21...
Connected to 192.168.29.21.
Escape character is &#39;^]&#39;.
GET /aaa/bbb/ccc
HTTP/1.0 200 OK
Content-type: text/html

&lt;html>
&lt;head>&lt;title>test page&lt;/title>&lt;/head>
&lt;body>
&lt;h1>Hello World!&lt;/h1>
&lt;/p>arams:GET /aaa/bbb/ccc
&lt;/body>
&lt;/html>
Connection closed by foreign host.

表示がおかしくなってる?でも「GET /aaa/bbb/ccc」は取れている模様。

ブラウザからアクセス

URL:http://192.168.29.21/aaa/bbb/ccc

1
2
3
4
5
6
7
8
&lt;html>
&lt;head>&lt;title>test page&lt;/title>&lt;/head>
&lt;body>
&lt;h1>Hello World!&lt;/h1>
&lt;p>params:GET /aaa/bbb/ccc HTTP/1.1
&lt;/p>
&lt;/body>
&lt;/html>

「GET /aaa/bbb/ccc HTTP/1.1」が取れている!!メソッド名とURLを取得できました。なるほど、こーなってるのね・・・
※ちゃんとやろうと思うと、ちゃんとHTTPの仕様を勉強せねばなるまい。