Ale*_*lex 5 python http request handler
我想要类似的东西BaseHTTPRequestHandler,只是我不希望它绑定到任何套接字;我想自己处理传入和传出的原始 HTTP 数据。有没有什么好的方法可以让我在 Python 中做到这一点?
为了澄清,我想要一个从Python(不是套接字)接收原始TCP数据的类,处理它并返回TCP数据作为响应(再次返回到python)。因此,此类将处理 TCP 握手,并且将具有覆盖我在 HTTP GET 和 POST 上发送的内容的方法,例如do_GET和do_POST。所以,我想要类似已经存在的服务器基础设施的东西,除了我想在 python 中传递所有原始 TCP 数据包而不是通过操作系统套接字。
BaseHTTPRequestHandler派生自StreamRequestHandler,它基本上从文件读取self.rfile并写入self.wfile,因此您可以从中派生一个类BaseHTTPRequestHandler并提供您自己的 rfile 和 wfile 例如
import StringIO
from BaseHTTPServer import BaseHTTPRequestHandler
class MyHandler(BaseHTTPRequestHandler):
def __init__(self, inText, outFile):
self.rfile = StringIO.StringIO(inText)
self.wfile = outFile
BaseHTTPRequestHandler.__init__(self, "", "", "")
def setup(self):
pass
def handle(self):
BaseHTTPRequestHandler.handle(self)
def finish(self):
BaseHTTPRequestHandler.finish(self)
def address_string(self):
return "dummy_server"
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write("<html><head><title>WoW</title></head>")
self.wfile.write("<body><p>This is a Total Wowness</p>")
self.wfile.write("</body></html>")
outFile = StringIO.StringIO()
handler = MyHandler("GET /wow HTTP/1.1", outFile)
print ''.join(outFile.buflist)
Run Code Online (Sandbox Code Playgroud)
输出:
dummy_server - - [15/Dec/2009 19:22:24] "GET /wow HTTP/1.1" 200 -
HTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.5.1
Date: Tue, 15 Dec 2009 13:52:24 GMT
Content-type: text/html
<html><head><title>WoW</title></head><body><p>This is a Total Wowness</p></body></html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11882 次 |
| 最近记录: |