使用Python创建简单的HTTP服务(基于SimpleHTTPServer) 和 FTP服务(基于pyftpdlib)

1 篇文章 0 订阅
1 篇文章 0 订阅

转载自:http://www.cnblogs.com/yili16438/p/d3209323913c6d53e6060fcd8d27e4c0.html


之一  使用python内置的SimpleHTTPServer创建http服务

(1)Windows下cmd方式(假设电脑提前已安装了python)

在 开始/运行/cmd 下,用cd命令切换至某个目录,敲入:

python -m SimpleHTTPServer 80  

后面的80端口是可选的,不填会采用缺省端口8000。注意,这会将当前所在的文件夹设置为默认的Web目录,试着在浏览器敲入本机地址:

http://localhost:80

如果当前文件夹有index.html文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。运行完毕,请ctrl+c,并关闭cmd。

(2)脚本方式

可以做成一个脚本如test.py,再建立一个快捷方式,就可以很方便的启动文件分享了。如果有更多需求,完全可以根据自己需要定制,具体的请参见官方文档SimpleHTTPServer,或者直接看源码。我拷贝一段,方便参考:

import SimpleHTTPServer
import SocketServer
PORT = 8000
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", PORT), Handler)
print "serving at port", PORT
httpd.serve_forever()

试着在浏览器敲入本机地址:

http://localhost:8000

如果test.py所在的当前文件夹中有index.html文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。运行完毕,请ctrl+c,并关闭cmd。

之二  Python版FTP服务器

看到这里,默认你已经安装了Python,不过你还需要安装另外一个好用的工具。你知道,当需要找Chrome插件的时候,会去GoogleWebStore;当需要找Firefox应用的时候,会去MozillaAdd-ons;当你需要找Python组件的时候,你需要pip:A tool for installing and managing Python packages,安装方法参见(先安装pip,然后设置系统变量,再用“pip install  pyftpdlib ”命令安装pyftpdlib模块),记得安装玩pip后,要将类似“C:\Python27\Scripts”设置到系统path中,否则在cmd中,敲入”pip list“会没有反应哦。自己慢慢探索,此处就不详细介绍了。

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

===============================================================================

2015.8.29 更新

上面的代码我自己没用起来,看了git hub后,经过试验,如下的代码最为实用,自己可以做成一个例如命名为ftpserver.py的文件,以后就可以用,省得去下载其他ftp软件,一来安装太麻烦,二来设置太麻烦。登陆方式建议采用admin/123456的方式,不建议匿名方式,反正匿名方式我没成功。

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

authorizer = DummyAuthorizer()
## 添加  用户名/密码/ftp目录。当目录用"."表示.py文件当前所在的目录
authorizer.add_user("admin", "123456", "E:/Download", perm="elradfmwM")
## 添加匿名访问时的 ftp目录
authorizer.add_anonymous("E:/Download", perm="elradfmwM")
handler = FTPHandler
handler.authorizer = authorizer

## 设置ftp的本地或者ip地址/端口,可以根据自己的实际情况修改ip和端口即可。
# server = FTPServer(("0.0.0.0", 21), handler)
# server = FTPServer(("127.0.0.1", 21), handler)
server = FTPServer(("192.168.1.n", 21), handler)
server.serve_forever()


或者采用下面这个不用每次输本机ip的方法

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import socket

# 自动获得本机ip地址
ip = socket.gethostbyname(socket.gethostname())
authorizer = DummyAuthorizer()
## 添加  用户名/密码/ftp目录。当目录用"."表示.py文件当前所在的目录
authorizer.add_user("admin", "123456", "E:/Download", perm="elradfmwM")
## 添加匿名访问时的 ftp目录
authorizer.add_anonymous("E:/Download", perm="elradfmwM")
handler = FTPHandler
handler.authorizer = authorizer

## 设置ftp的本地或者ip地址/端口,可以根据自己的实际情况修改ip和端口即可。
# server = FTPServer(("0.0.0.0", 21), handler)
# server = FTPServer(("127.0.0.1", 21), handler)
server = FTPServer((ip, 21), handler)
server.serve_forever()

============================================

后记

Python第三方组件就是个大宝库,基本上我自己遇到的大部分问题都可以在这里面找到解决文案。同时,建议喜欢折腾的程序员,甚至没有程序背景的IT人员,都尝试学习一下这门语言,这对解决问题的能力以及思维的锻炼都有莫大裨益。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值