使用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 相关文章推荐
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
tensorflow实现KNN识别MNIST
Mar 12 Python
python list转矩阵的实例讲解
Aug 04 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
Python 运行 shell 获取输出结果的实例
Jan 07 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
解决Django连接db遇到的问题
Aug 29 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
django配置app中的静态文件步骤
Mar 27 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
教你如何用Python实现人脸识别(含源代码)
Jun 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
PHP extract 将数组拆分成多个变量的函数
2010/06/30 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
javascript定时器完整实例
2015/02/10 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
全站最详细的Vuex教程
2018/04/13 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
微信小程序select下拉框实现效果
2019/05/15 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
详解Django之auth模块(用户认证)
2018/04/17 Python
python3去掉string中的标点符号方法
2019/01/22 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
高二生物教学反思
2014/01/27 职场文书
南京青奥会口号
2014/06/12 职场文书
运动会标语
2014/06/21 职场文书
化验员岗位职责
2015/02/14 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
人力资源部工作计划
2019/05/14 职场文书