使用Python创建简单的HTTP服务器的方法步骤


Posted in Python onApril 26, 2019

如果需要一个简单的Web Server,而不是安装那些复杂的HTTP服务程序,比如:Apache,Nginx等。那么可以使用Python自带的包完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。

基本命令

python -m Web服务器模块 [端口号,默认8000]

这里的“Web服务器模块”有如下三种:

BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。

SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。

CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。

启动web服务器

对于Python2,简单搭建Web服务器,只需在需要搭建Web服务器的目录(如 /home/pythontab/)下,输入如下命令:

python -m SimpleHTTPServer 8080
使用 8080端口的创建Web服务器

对于Python3,其创建Web服务器的等价命令,如下:

python3 -m http.server 8080

浏览web页面

可以在浏览器中输入 http://127.0.0.1:8080 或 将 http://localhost:8080进行访问。其他机器也可以通过服务器的IP地址来访问服务器资源。

如果当前文件夹有index.html文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。这样已经实现了最基本的文件分享的目的,你可以做成一个脚本,再建立一个快捷方式,就可以很方便的启动文件分享了。如果有更多需求,完全可以根据自己需要定制,具体的请参见官方文档SimpleHTTPServer,或者直接看源码。我拷贝一段,方便参考:

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

Python版FTP服务器

看到这里,默认你已经安装了Python,不过你还需要安装另外一个好用的工具。你知道,当需要找Chrome插件的时候,会去Google的WebStore;当需要找Firefox应用的时候,会去Mozilla的Add-ons;当你需要找Python组件的时候,你需要pip:A tool for installing and managing Python packages,安装方法就不介绍了。

Python没有内置一个直接可以用的FTP服务器,所以需要第三方组件的支持,我找到的这个组件叫pyftpdlib,首先安装:

pip install pyftpdlib

安装完后,和HTTP服器类似,执行以下命令就可以启动一个FTP服务器了:

python -m pyftpdlib -p 21

后面的21端口依然是可选的,不填会随机一个,被占用的端口将跳过。在浏览器敲入本机地址:
ftp://localhost:21

这时候,是匿名访问,也就是用户名是anonymous,密码为空,如果想要控制访问权限,你需要自己定制服务器,具体的可以参看pyftpdlib Tutorial,我这里拷贝过来一段作为介绍:

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

def main():
  # Instantiate a dummy authorizer for managing 'virtual' users
  authorizer = DummyAuthorizer()

  # Define a new user having full r/w permissions and a read-only
  # anonymous user
  authorizer.add_user('user', '12345', '.', perm='elradfmwM')
  authorizer.add_anonymous(os.getcwd())

  # Instantiate FTP handler class
  handler = FTPHandler
  handler.authorizer = authorizer

  # Define a customized banner (string returned when client connects)
  handler.banner = "pyftpdlib based ftpd ready."

  # Specify a masquerade address and the range of ports to use for
  # passive connections. Decomment in case you're behind a NAT.
  #handler.masquerade_address = '151.25.42.11'
  #handler.passive_ports = range(60000, 65535)

  # Instantiate FTP server class and listen on 0.0.0.0:2121
  address = ('', 2121)
  server = FTPServer(address, handler)

  # set a limit for connections
  server.max_cons = 256
  server.max_cons_per_ip = 5

  # start ftp server
  server.serve_forever()

if __name__ == '__main__':
  main()

只看代码应该基本知道该怎么用了,add_user显然是添加用户,2121是指定端口,当然也可以随机,还有最大连接数max_cons,每个ip最大连接限制,更多的接口建议直接看docstrings。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python利用hook技术破解https的实例代码
Mar 25 Python
python中使用mysql数据库详细介绍
Mar 27 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
对python中的for循环和range内置函数详解
Apr 17 Python
浅述python2与python3的简单区别
Sep 19 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
python开头的coding设置方法
Aug 08 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 #Python
python3.5安装python3-tk详解
Apr 26 #Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 #Python
python实现名片管理系统项目
Apr 26 #Python
python面向对象实现名片管理系统文件版
Apr 26 #Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 #Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 #Python
You might like
神族 Protoss 剧情介绍
2020/03/14 星际争霸
PHP文件读写操作之文件写入代码
2011/01/13 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
php中session与cookie的比较
2015/01/27 PHP
PHP pear安装配置教程
2016/05/14 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
javascript天然的迭代器
2010/10/29 Javascript
AngularJS表单编辑提交功能实例
2015/02/13 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
Node.js log4js日志管理详解
2018/07/31 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python 对输入的数字进行排序的方法
2018/06/23 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
python list的index()和find()的实现
2020/11/16 Python
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
怎样声明接口
2014/09/19 面试题
一份Java笔试题
2012/02/21 面试题
新任教师自我鉴定
2014/02/24 职场文书
给老师的一封感谢信
2015/01/20 职场文书
党员个人总结自评
2015/02/14 职场文书
捐款仪式主持词
2015/07/04 职场文书
教师学期述职自我鉴定
2019/08/16 职场文书
HTML怎么设置下划线?html文字加下划线方法
2021/12/06 HTML / CSS
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库
Python中的socket网络模块介绍
2022/07/23 Python