用Python簡(jiǎn)單實(shí)現(xiàn)Http服務(wù)端
Python 實(shí)現(xiàn) Http 服務(wù)端
Android 開發(fā)中常常有很多使用 Http 進(jìn)行交互的時(shí)候,有時(shí)候想測(cè)試一些 API 功能可能需要后臺(tái)的配合,但是往往需要雙方都有空的時(shí)候才行,效率不高。測(cè)試 API 的時(shí)候,有些簡(jiǎn)單功能不妨用 Python 自己寫一個(gè) Http Service 來(lái)實(shí)現(xiàn)。
實(shí)現(xiàn)一個(gè)簡(jiǎn)單的服務(wù)器
Python 內(nèi)置了一個(gè)簡(jiǎn)單的服務(wù)器,使用命令行命令就可以啟動(dòng)一個(gè) Http Service,默認(rèn)可以作為文件服務(wù)器,以當(dāng)前操作的文件夾為目錄,顯示該文件夾下的內(nèi)容,如果當(dāng)前文件夾有 index.html 文件,則會(huì)默認(rèn)顯示該文件。端口是可選的,不填會(huì)采用缺省端口 8000,在瀏覽器中訪問(wèn)地址 http://localhost:8000,就能看到文件服務(wù)器。
Python2 命令
python -m SimpleHTTPServer 8080
Python3 命令
python -m http.server 8080
自定義 API 服務(wù)器
簡(jiǎn)單的文件服務(wù)器有時(shí)候不能滿足我們的需求,我們需要測(cè)試一些 API 接口,這個(gè)時(shí)候我們可以使用 Python 編寫一個(gè)處理 API 的服務(wù)器。
- HTTPServer 可以讓我們?yōu)榉?wù)器指定一個(gè)本機(jī)地址和端口,同時(shí)配置使用我們的自定義 http 處理類
- BaseHTTPRequestHandler 繼承此類后,我們可以自定義 do_GET(),do_POST() 等方法處理客戶端 url 請(qǐng)求
- 對(duì) url 的路徑和參數(shù)進(jìn)行分離,進(jìn)行對(duì)應(yīng)的業(yè)務(wù)邏輯處理
- send_response() 設(shè)置 Http 返回碼,會(huì)自動(dòng)設(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() 等操作會(huì)把數(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:
// 無(wú) body
// 確認(rèn)頭信息
self.end_headers()
return
// 設(shè)置返回長(zhǎng)度
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簡(jiǎn)單實(shí)現(xiàn)Http服務(wù)端的詳細(xì)內(nèi)容,更多關(guān)于Python Http服務(wù)端的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python?基于aiohttp的異步爬蟲實(shí)戰(zhàn)詳解
- Python協(xié)程異步爬取數(shù)據(jù)(asyncio+aiohttp)實(shí)例
- python使用aiohttp通過(guò)設(shè)置代理爬取基金數(shù)據(jù)簡(jiǎn)單示例
- python?HTTP協(xié)議相關(guān)庫(kù)requests urllib基礎(chǔ)學(xué)習(xí)
- Python的強(qiáng)大HTTP庫(kù)Requests基本使用
- Python實(shí)現(xiàn)http服務(wù)器(http.server模塊傳參?接收參數(shù))實(shí)例
相關(guān)文章
Django 實(shí)現(xiàn)Admin自動(dòng)填充當(dāng)前用戶的示例代碼
今天小編就為大家分享一篇Django 實(shí)現(xiàn)Admin自動(dòng)填充當(dāng)前用戶的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python處理數(shù)據(jù)之匹配兩個(gè)Excel文件數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Python處理數(shù)據(jù)之匹配兩個(gè)Excel文件數(shù)據(jù)的實(shí)現(xiàn)方法,可以使用Python的Pandas庫(kù)來(lái)實(shí)現(xiàn)兩層循環(huán)匹配兩個(gè)Excel文件,需要的朋友可以參考下2023-09-09
如何基于python實(shí)現(xiàn)年會(huì)抽獎(jiǎng)工具
這篇文章主要介紹了如何基于python實(shí)現(xiàn)年會(huì)抽獎(jiǎng)工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
基于Python開發(fā)的高質(zhì)量PDF轉(zhuǎn)Word批量處理系統(tǒng)
在日常的學(xué)習(xí)和開發(fā)中,我們經(jīng)常遇到需要將大量 PDF 轉(zhuǎn)換為 Word 文檔的場(chǎng)景,因此,我抽時(shí)間將這個(gè)高頻需求重構(gòu)為一個(gè)基于 Python 開發(fā)的高質(zhì)量 PDF 轉(zhuǎn) Word 批量處理系統(tǒng),這不僅僅是一個(gè)自動(dòng)化腳本,更是一個(gè)踐行 SOLID 原則和設(shè)計(jì)模式,需要的朋友可以參考下2026-05-05
Python內(nèi)置函數(shù)input()示例詳解
input()函數(shù)是Python中用于獲取用戶輸入的一個(gè)簡(jiǎn)單而強(qiáng)大的工具,它在創(chuàng)建需要用戶交互的程序時(shí)非常有用,這篇文章主要介紹了Python內(nèi)置函數(shù)input()詳解,需要的朋友可以參考下2024-04-04
解決keras+flask模型的重復(fù)調(diào)用出錯(cuò)ValueError: Tensor is n
這篇文章主要介紹了解決keras+flask模型的重復(fù)調(diào)用出錯(cuò)ValueError: Tensor is not an element of this graph問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Python實(shí)現(xiàn)求一個(gè)集合所有子集的示例
今天小編就為大家分享一篇Python 實(shí)現(xiàn)求一個(gè)集合所有子集的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05

