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中学习K-Means和图片压缩
Nov 20 Python
详解Python判定IP地址合法性的三种方法
Mar 06 Python
使用Eclipse如何开发python脚本
Apr 11 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
python ---lambda匿名函数介绍
Mar 13 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
深入了解python列表(LIST)
Jun 08 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 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
Dedecms常用函数解析
2008/02/01 PHP
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
Bootstrap树形控件使用方法详解
2016/01/27 Javascript
基于bootstrap风格的弹框插件
2016/12/28 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
详解JavaScript 浮点数运算的精度问题
2019/07/23 Javascript
JS实现小米轮播图
2020/09/21 Javascript
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python反转列表的三种方式解析
2019/11/08 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
电视新闻稿
2015/07/17 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang