python实现简单http服务器功能


Posted in Python onSeptember 17, 2018

背景

写一个python脚本,实现简单的http服务器功能:

1.浏览器中输入网站地址:172.20.52.163:20014

2.server接到浏览器的请求后,读取本地的index.html文件的内容,回发给浏览器

代码实现

server.py

#!/usr/bin/python
import socket
import signal
import errno
from time import sleep 
 
 
def HttpResponse(header,whtml):
 f = file(whtml)
 contxtlist = f.readlines()
 context = ''.join(contxtlist)
 response = "%s %d\n\n%s\n\n" % (header,len(context),context)
 return response
 
def sigIntHander(signo,frame):
 print 'get signo# ',signo
 global runflag
 runflag = False
 global lisfd
 lisfd.shutdown(socket.SHUT_RD)
 
strHost = "172.20.52.163"
HOST = strHost #socket.inet_pton(socket.AF_INET,strHost)
PORT = 20014
 
httpheader = '''\
HTTP/1.1 200 OK
Context-Type: text/html
Server: Python-slp version 1.0
Context-Length: '''
 
lisfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
lisfd.bind((HOST, PORT))
lisfd.listen(2)
 
signal.signal(signal.SIGINT,sigIntHander)
 
runflag = True
while runflag:
 try:
  confd,addr = lisfd.accept()
 except socket.error as e:
  if e.errno == errno.EINTR:
   print 'get a except EINTR'
  else:
   raise
  continue
 
 if runflag == False:
  break;
 
 print "connect by ",addr
 data = confd.recv(1024)
 if not data:
  break
 print data
 confd.send(HttpResponse(httpheader,'index.html'))
 confd.close()
else:
 print 'runflag#',runflag
 
print 'Done'

index.html

<html>
 <head>
 <title>Python Server</title>
 </head>
 <body>
 <h1>Hello python</h1>
 <p>Welcom to the python world</br>
 </body>
</html>

测试

测试结果:

root@cloud2:~/slp/pythonLearning/socket# ./server_v1.py
connect by  ('172.20.52.110', 6096)
GET / HTTP/1.1
Host: 172.20.52.163:20014
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

浏览器

python实现简单http服务器功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pygame实现雷电游戏雏形开发
Nov 20 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Python单元测试工具doctest和unittest使用解析
Sep 02 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
python中元组的用法整理
Jun 15 Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 Python
python图片灰度化处理的几种方法
Jun 23 Python
python实现自动登录
Sep 17 #Python
python发送告警邮件脚本
Sep 17 #Python
python实现zabbix发送短信脚本
Sep 17 #Python
python通过zabbix api获取主机
Sep 17 #Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 #Python
python实现Zabbix-API监控
Sep 17 #Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 #Python
You might like
SONY ICF-F10中波修复记
2021/03/02 无线电
php错误级别的设置方法
2013/06/17 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python读取图片任意范围区域
2019/01/23 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
英语老师推荐信
2014/02/26 职场文书
酒店管理求职信
2014/06/09 职场文书
神龙架导游词
2015/02/11 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
施工安全员岗位职责
2015/04/11 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫
Linux中如何安装并部署Redis
2022/04/18 Servers