読者です 読者をやめる 読者になる 読者になる

webブラウザからのリクエストを書き出す

前回書いたHTTPRequestHandlerのhandleメソッドを次のように書き直して、ブラウザから送られてくるリクエストを調べるツール?を作ってみました。JavaScriptの場合とかも試してみたいとも思いますが、今回はHTMLのフォームからPOSTメソッドでリクエストを送信した場合のものを調べています。

import mimetools
class HTTPRequestHandler(object):
    responses = BaseHTTPServer.BaseHTTPRequestHandler.responses
    MessageClass = mimetools.Message
..
    def handle(self):
        self.raw_requestline = self.rfile.readline()
        headers = self.MessageClass(self.rfile, 0)
        if not self.raw_requestline:
            return
        self.parse_request() 
        self.send_response(200)
        self.send_header("Content-type", "text/html")
        self.send_header("Last-Modified", self.date_time_string())
        self.end_headers()
        self.wfile.write("""\
<html>
<head>
<title>POST TEST</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h1>POST TEST</h1>
<form action="./" method="POST">
name:<input type="text" name="name"/><br/>
message:<textarea name="message"></textarea>
<input type="submit" value="push"/>
</form>
<pre>""")
        self.wfile.write(self.raw_requestline)
        self.wfile.write(str(headers))
        length = headers.get("Content-Length", None)
        if length is not None:
            self.wfile.write(self.rfile.read(int(length)))
        self.wfile.write("</pre>\n</body>\n</html>")

"localhost:ポート番号"をchromeで開くと、次のような結果が得られます。


GET / HTTP/1.1
Host: localhost:5986
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3

フォームにメッセージを書きこんでみると、メソッドがPOSTに変わります。

POST / HTTP/1.1
Host: localhost:5986
Connection: keep-alive
Content-Length: 27
Cache-Control: max-age=0
Origin: http://localhost:5986
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://localhost:5986/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
name=nabeyang&message=Hello