用Python簡單實現(xiàn)Http服務(wù)端
Python 實現(xiàn) Http 服務(wù)端
Android 開發(fā)中常常有很多使用 Http 進行交互的時候,有時候想測試一些 API 功能可能需要后臺的配合,但是往往需要雙方都有空的時候才行,效率不高。測試 API 的時候,有些簡單功能不妨用 Python 自己寫一個 Http Service 來實現(xiàn)。
實現(xiàn)一個簡單的服務(wù)器
Python 內(nèi)置了一個簡單的服務(wù)器,使用命令行命令就可以啟動一個 Http Service,默認(rèn)可以作為文件服務(wù)器,以當(dāng)前操作的文件夾為目錄,顯示該文件夾下的內(nèi)容,如果當(dāng)前文件夾有 index.html 文件,則會默認(rèn)顯示該文件。端口是可選的,不填會采用缺省端口 8000,在瀏覽器中訪問地址 http://localhost:8000
,就能看到文件服務(wù)器。
Python2 命令
python -m SimpleHTTPServer 8080
Python3 命令
python -m http.server 8080
自定義 API 服務(wù)器
簡單的文件服務(wù)器有時候不能滿足我們的需求,我們需要測試一些 API 接口,這個時候我們可以使用 Python 編寫一個處理 API 的服務(wù)器。
- HTTPServer 可以讓我們?yōu)榉?wù)器指定一個本機地址和端口,同時配置使用我們的自定義 http 處理類
- BaseHTTPRequestHandler 繼承此類后,我們可以自定義 do_GET(),do_POST() 等方法處理客戶端 url 請求
- 對 url 的路徑和參數(shù)進行分離,進行對應(yīng)的業(yè)務(wù)邏輯處理
- send_response() 設(shè)置 Http 返回碼,會自動設(shè)置 Message
- send_header() 設(shè)置 Http 頭信息,以 end_headers() 確認(rèn)頭信息完成
- wfile.write() 寫入 Http body 數(shù)據(jù),文件使用 ‘rb’ 讀取后寫入,String 正常寫入
注: 調(diào)用 end_headers() 之后,再調(diào)用 send_header() 等操作會把數(shù)據(jù)寫入 body 中。
以下為示例程序,python3 版本:
import time import getHandler from http.server import BaseHTTPRequestHandler, HTTPServer HOST = '192.168.137.1' PORT_NUMBER = 8080 class TestHttpHandler(BaseHTTPRequestHandler): def do_GET(self): // 業(yè)務(wù)邏輯處理 ret_code, ret_byte = getHandler.handler(self.path) // 設(shè)置相應(yīng)碼 self.send_response(ret_code) if ret_byte is None: // 無 body // 確認(rèn)頭信息 self.end_headers() return // 設(shè)置返回長度 self.send_header('Content-Length', len(ret_byte)) // 確認(rèn)頭信息 self.end_headers() // 寫入 body 數(shù)據(jù) self.wfile.write(ret_byte) def do_POST(self): self.send_response(400) self.end_headers() def do_PUT(self): self.send_response(400) self.end_headers() def do_DELETE(self): self.send_response(400) self.end_headers() def start_server(): http_server = HTTPServer((HOST, PORT_NUMBER), TestHttpHandler) print(time.asctime(), "Server Starts - %s:%s" % (HOST, PORT_NUMBER)) try: http_server.serve_forever() except KeyboardInterrupt: pass http_server.server_close() print(time.asctime(), "Server Stops - %s:%s" % (HOST, PORT_NUMBER)) if __name__ == "__main__": start_server()
以上就是用Python簡單實現(xiàn)Http服務(wù)端的詳細(xì)內(nèi)容,更多關(guān)于Python Http服務(wù)端的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
手把手教你用Matplotlib實現(xiàn)數(shù)據(jù)可視化
Matplotlib是支持?Python語言的開源繪圖庫,因為其支持豐富的繪圖類型、簡單的繪圖方式以及完善的接口文檔,深受?Python?工程師、科研學(xué)者、數(shù)據(jù)工程師等各類人士的喜歡。本文將詳細(xì)為大家介紹如何用Matplotlib實現(xiàn)數(shù)據(jù)可視化,需要的可以參考一下2022-02-02使用Python的Treq on Twisted來進行HTTP壓力測試
這篇文章主要介紹了使用Python的Treq on Twisted來進行HTTP壓力測試,基于Python中的Twisted框架,需要的朋友可以參考下2015-04-04Python基礎(chǔ)語言學(xué)習(xí)筆記總結(jié)(精華)
給大家分享一篇關(guān)于Python基礎(chǔ)學(xué)習(xí)內(nèi)容的學(xué)習(xí)筆記整理總結(jié)篇,里面匯集了學(xué)習(xí)Python基礎(chǔ)語言的難點和技巧,分享給大家。2017-11-11Python大數(shù)據(jù)之網(wǎng)絡(luò)爬蟲的post請求、get請求區(qū)別實例分析
這篇文章主要介紹了Python大數(shù)據(jù)之網(wǎng)絡(luò)爬蟲的post請求、get請求區(qū)別,結(jié)合具體實例形式分析了Python網(wǎng)頁爬蟲post請求與get請求相關(guān)使用技巧,需要的朋友可以參考下2019-11-11Python實現(xiàn)Linux的find命令實例分享
本文給大家分享的是使用python簡單實現(xiàn)模擬linux的find命令的實例代碼,推薦給大家,希望大家能夠喜歡2017-06-06