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 相关文章推荐
Django中处理出错页面的方法
Jul 15 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
python英语单词测试小程序代码实例
Sep 09 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python 模块重载的五种方法
Apr 24 Python
python基于opencv批量生成验证码的示例
Apr 28 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
如何利用php+mysql保存和输出文件
2006/10/09 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php文件操作相关类实例
2015/06/18 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
php中使用websocket详解
2016/09/23 PHP
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
2019/08/27 Python
Pytorch之parameters的使用
2019/12/31 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
J2EE面试题
2016/03/14 面试题
自荐信怎么写好
2013/11/11 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
初中学生期末评语
2014/04/24 职场文书
工会主席事迹材料
2014/06/03 职场文书
英语感谢信范文
2015/01/20 职场文书
青岛导游词
2015/02/12 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技