使用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的Tkinter实现一个简易计算器
Dec 31 Python
Python复数属性和方法运算操作示例
Jul 21 Python
python tensorflow基于cnn实现手写数字识别
Jan 01 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
python使用epoll实现服务端的方法
Oct 16 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python使用Turtle库绘制一棵西兰花
Nov 23 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 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截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP生成RSS文件类实例
2014/12/05 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
PHP vsprintf()函数格式化字符串操作原理解析
2020/07/14 PHP
编写自己的jQuery插件简单实现代码
2011/04/19 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
vue组件实例解析
2017/01/10 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
Python实现的彩票机选器实例
2015/06/17 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
医学生自荐信
2013/12/03 职场文书
全陪导游欢迎词
2014/01/17 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
小学英语课后反思
2014/04/26 职场文书
服务承诺口号
2014/05/22 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
2015中学教学工作总结
2015/07/22 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
七个Python必备的GUI库
2021/04/27 Python
MySQL 数据丢失排查案例
2021/05/08 MySQL
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
纯html+css实现打字效果
2021/08/02 HTML / CSS
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python