使用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文本生成二维码实例
Jan 06 Python
Python列表切片用法示例
Apr 19 Python
Python和C/C++交互的几种方法总结
May 11 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
Python实现使用request模块下载图片demo示例
May 24 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
快速解决vue.js 模板和jinja 模板冲突的问题
Jul 26 Python
详解python中index()、find()方法
Aug 29 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
python numpy--数组的组合和分割实例
Feb 24 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 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
php 文章采集正则代码
2009/12/28 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
url参数中有+、空格、=、%、&、#等特殊符号的问题解决
2013/05/15 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
React快速入门教程
2017/01/17 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
Python中遍历列表的方法总结
2019/06/27 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
Delphi工程师笔试题
2013/09/21 面试题
会计电算化应届生求职信
2013/11/03 职场文书
公司经理聘任书
2014/03/29 职场文书
学生通报表扬范文
2015/05/04 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
交流会主持词
2015/07/02 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript