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