使用Python建立簡單的HTTP服務(基於SimpleHTTPServer) 和 FTP服務(基於pyftpdlib)

來源:互聯網
上載者:User

轉載自: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 SimpleHTTPServerimport SocketServerPORT = 8000Handler = SimpleHTTPServer.SimpleHTTPRequestHandlerhttpd = SocketServer.TCPServer(("", PORT), Handler)print "serving at port", PORThttpd.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 DummyAuthorizerfrom pyftpdlib.handlers import FTPHandlerfrom pyftpdlib.servers import FTPServerdef 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人員,都嘗試學習一下這門語言,這對解決問題的能力以及思維的鍛煉都有莫大裨益。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.