python案例学习——http服务器
2015-09-25 14:12
405 查看
没分析完呢
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/awkward.gif)
,没搞定呢,回头把代码的分析都写上来。
这是一个http服务器的代码,直接运行能实现http访问,但是访问没内容,也就是没有任何的处理逻辑,只有一个打印显示,也只是服务端。
最终目标是要实现一个http文件服务器,可以直接下载文件的,配合我的工程使用,服务端只推送更新通知,终端要去指定的http服务器下载文件,就这么简单一个(子)需求。
感觉代码并不那么完全,那是因为用了基类,都是固定的套路了,就自己派生,改一下处理逻辑,不过具体都能怎么改呢,怎么实现文件读取/发送呢,因为不熟悉python,所以得研究一下。
代码如下:
结束标记(ps,这个csdn编辑太难用了,尤其插代码,动不动就全乱了,还得找好位置)
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/awkward.gif)
,没搞定呢,回头把代码的分析都写上来。
这是一个http服务器的代码,直接运行能实现http访问,但是访问没内容,也就是没有任何的处理逻辑,只有一个打印显示,也只是服务端。
最终目标是要实现一个http文件服务器,可以直接下载文件的,配合我的工程使用,服务端只推送更新通知,终端要去指定的http服务器下载文件,就这么简单一个(子)需求。
感觉代码并不那么完全,那是因为用了基类,都是固定的套路了,就自己派生,改一下处理逻辑,不过具体都能怎么改呢,怎么实现文件读取/发送呢,因为不熟悉python,所以得研究一下。
代码如下:
#encoding=utf-8 ''' Created on 2012-11-7 @author: Steven http://www.lifeba.org 基于BaseHTTPServer的http server实现,包括get,post方法,get参数接收,post参数接收。 ''' from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import io,shutil import urllib,time import getopt,string class MyRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.process(2) def do_POST(self): self.process(1) def process(self,type): print self.command print "hahaha--------------" print self.path print "------------------end" content ="" if type==1:#post方法,接收post参数 datas = self.rfile.read(int(self.headers['content-length'])) datas = urllib.unquote(datas).decode("utf-8", 'ignore')#指定编码方式 datas = transDicts(datas)#将参数转换为字典 if datas.has_key('data'): content = "data:"+datas['data']+"\r\n" if '?' in self.path: query = urllib.splitquery(self.path) action = query[0] if query[1]:#接收get参数 queryParams = {} for qp in query[1].split('&'): kv = qp.split('=') queryParams[kv[0]] = urllib.unquote(kv[1]).decode("utf-8", 'ignore') content+= kv[0]+':'+queryParams[kv[0]]+"\r\n" #指定返回编码 enc="UTF-8" content = content.encode(enc) f = io.BytesIO() f.write(content) f.seek(0) self.send_response(200) self.send_header("Content-type", "text/html; charset=%s" % enc) self.send_header("Content-Length", str(len(content))) self.end_headers() shutil.copyfileobj(f,self.wfile) def transDicts(params): dicts={} if len(params)==0: return params = params.split('&') for param in params: dicts[param.split('=')[0]]=param.split('=')[1] return dicts if __name__=='__main__': try: # print "bases:", MyRequestHandler.__bases__ # print "doc:", MyRequestHandler.__doc__ # print "dict:", MyRequestHandler.__dict__ # print "module:", MyRequestHandler.__module__ # print "name:", MyRequestHandler.__name__ server = HTTPServer(('', 8000), MyRequestHandler) print 'started httpserver...' server.serve_forever() except KeyboardInterrupt: server.socket.close() pass
结束标记(ps,这个csdn编辑太难用了,尤其插代码,动不动就全乱了,还得找好位置)
相关文章推荐
- 移动端网络游戏服务器架构
- loopj.android.http.AsyncHttpClient 400
- Linux下必须知道的11个网络命令
- 2015(第五届)中国未来网络发展与创新论坛 征文通知
- 2015(第五届)中国未来网络发展与创新论坛 征文通知
- Apache2 httpd.conf 配置详解
- 新建JSP报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- Broadcast监听网络状态,ping判断网络是否可用
- Windows 7系统笔记本创建wifi热点供手机上网的方法
- Grid ++ MIME 类型配置 载入报表数据,检查此URL及其数据,错误提示 网络服务器响应不成功
- 未能从'http://192.168.7.174/ddd/abc?abc.grf'a=00234载入报表数据,检查此URL及响应数据,错误提示:网络服务器
- 15北京网络赛 E题
- 网络基础知识学习
- AngularJS $http使用
- 2015北京网络赛 J Scores bitset+分块
- Android 各大网络请求库的比较及实战
- 网络编程--TCP-IP--2
- TCP服务器listen函数的包裹函数
- 深度学习之卷积神经网络
- Android异步下载网络图片