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 相关文章推荐
python中dir函数用法分析
Apr 17 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
pycharm运行程序时在Python console窗口中运行的方法
Dec 03 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python实现BP神经网络回归预测模型
Aug 09 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python实现自定义读写分离代码实例
Nov 16 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
基于opencv的selenium滑动验证码的实现
Jul 24 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
各种咖啡的英文名子是什么
2021/03/03 新手入门
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
微信小程序 页面跳转传参详解
2016/10/28 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
基于node.js之调试器详解
2017/08/22 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
使用python实现tcp自动重连
2017/07/02 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python操作mongodb的9个步骤
2018/06/04 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python标记语句块使用方法总结
2019/08/05 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
维氏瑞士军刀英国网站:Victorinox英国
2019/07/04 全球购物
宿舍使用违章电器检讨书
2014/01/12 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
营销学习心得体会
2014/09/12 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
Java数据结构之堆(优先队列)
2022/05/20 Java/Android
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技