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爬虫之爬虫框架Scrapy安装配置
Nov 06 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
Django 迁移、操作数据库的方法
Aug 02 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 Python
golang中的空接口使用详解
Mar 30 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
模仿OSO的论坛(二)
2006/10/09 PHP
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
2013/06/18 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
2013/08/21 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
使用python Django做网页
2013/11/04 Python
Python中操作MySQL入门实例
2015/02/08 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python3爬虫学习入门教程
2018/12/11 Python
python异步Web框架sanic的实现
2020/04/27 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python regex库实例用法总结
2021/01/03 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
自动化专业个人求职信范文
2013/11/29 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
优秀班主任材料
2014/12/16 职场文书
二手车转让协议书
2015/01/29 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
MongoDB日志切割的三种方式总结
2021/09/15 MongoDB
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS