使用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处理python编码问题
Mar 13 Python
把项目从Python2.x移植到Python3.x的经验总结
Apr 20 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
django使用LDAP验证的方法示例
Dec 10 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
深入了解Python在HDA中的应用
Sep 05 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
Python实现点云投影到平面显示
Jan 18 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
python代码制作configure文件示例
2014/07/28 Python
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
详解python编译器和解释器的区别
2019/06/24 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
pytorch 预训练层的使用方法
2019/08/20 Python
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
一套VC试题
2015/01/23 面试题
大三预备党员入党思想汇报
2014/01/08 职场文书
大学学习生活感言
2014/01/18 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
2014年情人节活动方案
2014/02/16 职场文书
事业单位考核材料
2014/05/21 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
罚站检讨书
2015/01/29 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
孝女彩金观后感
2015/06/10 职场文书
Golang Elasticsearches 批量修改查询及发送MQ
2022/04/19 Golang