python 解析http_解析Python BaseHTTPServer

本文介绍了如何使用Python的BaseHTTPServer库搭建一个简单的HTTP服务器,包括处理GET、POST和DELETE请求的方法,以及如何扩展自定义请求处理器。通过示例代码展示了如何响应不同的HTTP请求。
摘要由CSDN通过智能技术生成

解析Python

BaseHTTPServer

1.概述

某项目的性能测试工作,已经接近尾声,借此机会进行一下总结。

这项工作,对我这种编码白痴和技术菜鸟来讲,最大的收获莫过于完成工作的同时,入门了一点点python编程和BaseHTTPServer库的使用。

2.

BaseHTTPServer

BaseHTTPServer库是一个非常简单并且容易上手的python基础库。基于该库,用户可以完成很多有用的小工具。

BaseHTTPServer库中主要包含两个类:HTTPServer和BaseHTTPRequestHandler。前者继承SocketServer.TCPServer,主要用于监听用户请求,并把请求转发给应答处理模块。BaseHTTPRequestHandler就是应答处理模块,该类继承SocketServer.StreamRequestHandler,主要对HTTP请求作出应答。BaseHTTPRequestHandler本身无法响应具体的HTTP请求,必须被继承来处理对应的HTTP请求。

3. 程序框架

# 导入对应模块from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

#定义HTTP

Server的IP和端口号SERVER_IP

= '10.64.20.52'PORT_NUMBER = 80

#创建继承于BaseHTTPRequestHandler的自定义类,用来处理对应的HTTP请求class myHttpRequestHandler(BaseHTTPRequestHandler):

#

定义处理http get方法的逻辑def do_GET(self):

#

http请求头的处理示例,可以通过http请求头获得一些需要的信息content_length = int(self.headers.getheader('content-length'))

#根据需要设计自己的http处理逻辑content = "xxxxx" result_code = 200

#将构造的http响应消息返回给对应的http

client self.send_response(result_code)

self.end_headers()

self.wfile.write(content)

return #同http

get的处理一样,定义处理http

post方法的逻辑,可以引入对应的异常处理机制def do_POST(self):

try:

print "do some thing"

except

IOError:

self.send_error(result_code, "error message")

#定义处理http

delet方法的逻辑def do_DELETE(self):

try:

#启动HTTP

Server监听对应的端口server =

HTTPServer((SERVER_IP, PORT_NUMBER), myHttpRequestHandler)

print 'Httpserver on port ' , PORT_NUMBER, '

has been started.' server.serve_forever()

except

KeyboardInterrupt:

#根据条件关闭http

server print

'^C received, web server has been

shutdown.' server.socket.close()

3. 程序实例

源代码

from

BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

SERVER_IP = '10.64.20.52'PORT_NUMBER = 80

class myHttpRequestHandler(BaseHTTPRequestHandler):

def do_GET(self):

sendReply = False

try:

if self.path.find("plus")

>= 0:

content = "You want to do

plus" result_code =

200

sendReply = True

if self.path.find("sub")

>= 0:

content = "You want to do

sub" result_code =

200

sendReply = True

if sendReply ==

True:

print 'your http response content is:

', content

print 'your http response code is:

', result_code

self.send_response(result_code)

self.end_headers()

self.wfile.write(content)

return

except IOError:

self.send_error(result_code, "EEROR: your request is

error!!"+self.path)

def do_POST(self):

#get content length of post

request. content_length =

int(self.headers.getheader('content-length'))

#get the whole content of post

request postvars =

self.rfile.read(content_length)

sendReply =

False

try:

#feedback the whole content of the

post request. content =

postvars

result_code = 200

sendReply =

True

###-----Doing respons to the

request. print

'your http response content is:

', content

print 'your http response code is:

', result_code

self.send_response(result_code)

self.end_headers()

self.wfile.write(content)

return

except IOError:

self.send_error(result_code, "EEROR: your request is error!!"

+ self.path)

try:

server = HTTPServer((SERVER_IP, PORT_NUMBER),

myHttpRequestHandler)

print 'Started httpserver on port '

, PORT_NUMBER

server.serve_forever()

except

KeyboardInterrupt:

print '^C received, shutting down the web

server' server.socket.close()

运行结果

a4c26d1e5885305701be709a3d33442f.png

4. 关于HTTPS处理

BaseHTTPServer也可以处理https的请求,只要加入对应的证书即可。

源代码

httpd =

BaseHTTPServer.HTTPServer(('10.64.20.52', 443), MyHttpHandler)

httpd.socket =

ssl.wrap_socket(httpd.socket, certfile='./server.pem', server_side=True)

httpd.serve_forever()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值