使用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版
Dec 07 Python
python定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python实现数据库编程方法详解
Jun 09 Python
windows10下python3.5 pip3安装图文教程
Apr 02 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
Sep 23 Python
学Python 3的理由和必要性
Nov 19 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
python实现一个猜拳游戏
Apr 05 Python
Python学习开发之图形用户界面详解
Aug 23 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
js函数排序的实例代码
2013/07/01 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JQuery中Text方法用法实例分析
2015/05/18 Javascript
javascript类型系统——undefined和null全面了解
2016/07/13 Javascript
js定时器实例分享
2016/12/20 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
js正则表达式简单校验方法
2021/01/03 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
Python简单实现安全开关文件的两种方式
2016/09/19 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
pybind11在Windows下的使用教程
2019/07/04 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
一行python实现树形结构的方法
2019/08/09 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
python小白切忌乱用表达式
2020/05/29 Python
python处理写入数据代码讲解
2020/10/22 Python
Python下载的11种姿势(小结)
2020/11/18 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
森林防火宣传标语
2014/06/27 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
学生会部长竞选稿
2015/11/19 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server