Python实现简单http服务器


Posted in Python onApril 12, 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 中文字符串的处理实现代码
Oct 25 Python
Python OS模块常用函数说明
May 23 Python
Python栈类实例分析
Jun 15 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
python requests指定出口ip的例子
Jul 25 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
python如何删除列为空的行
Jul 17 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
Django框架中模型的用法
Jun 10 Python
Python实现一个服务器监听多个客户端请求
Apr 12 #Python
python使用socket创建tcp服务器和客户端
Apr 12 #Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 #Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 #Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 #Python
pandas全表查询定位某个值所在行列的方法
Apr 12 #Python
Python Pandas找到缺失值的位置方法
Apr 12 #Python
You might like
PHP+APACHE实现网址伪静态
2015/02/22 PHP
推荐十款免费 WordPress 插件
2015/03/24 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
Script的加载方法小结
2011/01/12 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python中reload(module)的用法示例详解
2017/09/15 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
详解python中index()、find()方法
2019/08/29 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
空字符串(“”)和null的区别
2012/11/13 面试题
爱心捐助倡议书
2014/05/19 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python