亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口

 更新時間:2023年07月19日 10:45:08   作者:羋學僧  
本文主要介紹了Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

BaseHTTPRequestHandler介紹

這是一個以TCPServer為基礎開發(fā)的模塊,可以在請求外層添加http協(xié)議報文,發(fā)送http協(xié)議。

#! /usr/bin/env python3
# -*- coding:UTF-8 -*-
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import cgi
import datetime
host = ('',8003)
engine = create_engine('mysql+pymysql://pointgrab_user:pointgrabAaaa1111@rm-bp1d2s03ka9b803602o.mysql.rds.aliyuncs.com:3306/pointgrab_info',echo=False)
class TodoHandler(BaseHTTPRequestHandler):
? ? def do_GET(self):
? ? ? ? self.send_error(415, 'Only post is supported')
? ? def do_POST(self):
? ? ? ? ctype, pdict = cgi.parse_header(self.headers['content-type'])
? ? ? ? # print(ctype, pdict)
? ? ? ? token = self.headers['X-Auth-Token']
? ? ? ? # print(token)
? ? ? ? if token == 'token' and ctype == 'application/json':
? ? ? ? ? ? path = str(self.path) ?# 獲取請求的url
? ? ? ? ? ? if path == '/api/counting/':
? ? ? ? ? ? ? ? # print(path)
? ? ? ? ? ? ? ? length = int(self.headers['content-length']) ?# 獲取除頭部后的請求參數(shù)的長度
? ? ? ? ? ? ? ? datas = self.rfile.read(length) # 獲取請求參數(shù)數(shù)據(jù),請求數(shù)據(jù)為json字符串
? ? ? ? ? ? ? ? # print(datas)
? ? ? ? ? ? ? ? rjson = json.loads(datas.decode())
? ? ? ? ? ? ? ? # print(rjson,type(rjson))
? ? ? ? ? ? ? ? countingdf = counting(rjson)
? ? ? ? ? ? ? ? data_into_sql(countingdf)
? ? ? ? ? ? ? ? self.send_response(200)
? ? ? ? ? ? ? ? self.send_header('Content-type', 'application/json')
? ? ? ? ? ? ? ? self.end_headers()
? ? ? ? ? ? ? ? self.wfile.write(json.dumps('Counting data is inserted').encode())
? ? ? ? ? ? elif path == '/api/traffic/':
? ? ? ? ? ? ? ? # print(path)
? ? ? ? ? ? ? ? length = int(self.headers['content-length']) ?# 獲取除頭部后的請求參數(shù)的長度
? ? ? ? ? ? ? ? datas = self.rfile.read(length) # 獲取請求參數(shù)數(shù)據(jù),請求數(shù)據(jù)為json字符串
? ? ? ? ? ? ? ? # print(datas)
? ? ? ? ? ? ? ? rjson = json.loads(datas.decode())
? ? ? ? ? ? ? ? # print(rjson,type(rjson))
? ? ? ? ? ? ? ? trafficdf = traffic(rjson)
? ? ? ? ? ? ? ? data_into_sql(trafficdf)
? ? ? ? ? ? ? ? self.send_response(200)
? ? ? ? ? ? ? ? self.send_header('Content-type', 'application/json')
? ? ? ? ? ? ? ? self.end_headers()
? ? ? ? ? ? ? ? self.wfile.write(json.dumps('Traffic data is inserted').encode())
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? self.send_error(404, "Not Found")
? ? ? ? else:
? ? ? ? ? ? self.send_error(415, "Only json data is supported.")
if __name__ == '__main__':
? ? server = HTTPServer(host, TodoHandler)
? ? print("Starting server, listen at: %s:%s" % host)
? ? server.serve_forever()

請求代碼

POST /api/counting/ HTTP/1.1
Host: 127.0.0.1:8003
Content-Type: application/json
X-Auth-Token: token
Accept: */*
Host: 127.0.0.1:8003
content-length: 126
Connection: keep-alive
cache-control: no-cache

{"areaId":"vQ_82PjcQFyt5LHA_751sg","devices":["R3QAztuSQZusLP5Fz9jVXg"],"count":2,"type":"COUNTING","timestamp":1526376098800}

BaseHTTPServer:

主要包含兩個類HTTPServer和BaseHTTPRequestHandler

  • HTTPServer:
    繼承SocketServer.TCPServer,用于獲取請求,并將請求分配給應答程序處理
  • BaseHTTPRequestHandler:
    繼承SocketServer.StreamRequestHandler,對http連接的請求作出應答(response)

基于BaseHTTPServer 的Http Server的處理流程:

HTTPServer綁定對應的應答類(BaseHTTPRequestHandler )

http_server = HTTPServer(('', int(port)), ServerHTTP)

監(jiān)聽端口:

http_server.serve_forever()

serve_forever()方法使用select.select()循環(huán)監(jiān)聽請求,當接收到請求后調(diào)用
當監(jiān)聽到請求時,取出請求對象

應答:

創(chuàng)建新線程以連接對象(開始理解成請求對象)為參數(shù)實例化應答類:ServerHTTP()應答類根據(jù)請求方式調(diào)用ServerHTTP.do_XXX處理方法

常用方法/屬性:

BaseHTTPRequestHandler.path ? ? ? ? ? ? ? ? ? ?#包含的請求路徑和GET請求的數(shù)據(jù)
BaseHTTPRequestHandler.command ? ? ? ? ? ? ? ? #請求類型GET、POST...
BaseHTTPRequestHandler.request_version ? ? ? ? #請求的協(xié)議類型HTTP/1.0、HTTP/1.1
BaseHTTPRequestHandler.headers ? ? ? ? ? ? ? ? #請求的頭
BaseHTTPRequestHandler.responses ? ? ? ? ? ? ? #HTTP錯誤代碼及對應錯誤信息的字典
BaseHTTPRequestHandler.handle() ? ? ? ? ? ? ? ?#用于處理某一連接對象的請求,調(diào)用handle_one_request方法處理
BaseHTTPRequestHandler.handle_one_request() ? ?#根據(jù)請求類型調(diào)用do_XXX()方法,XXX為請求類型
BaseHTTPRequestHandler.do_XXX() ? ? ? ? ? ? ? ?#處理請求
BaseHTTPRequestHandler.send_error() ? ? ? ? ? ?#發(fā)送并記錄一個完整的錯誤回復到客戶端,內(nèi)部調(diào)用send_response()方法實現(xiàn)
BaseHTTPRequestHandler.send_response() ? ? ? ? #發(fā)送一個響應頭并記錄已接收的請求
BaseHTTPRequestHandler.send_header() ? ? ? ? ? #發(fā)送一個指定的HTTP頭到輸出流。 keyword 應該指定頭關鍵字,value 指定它的值
BaseHTTPRequestHandler.end_headers() ? ? ? ? ? #發(fā)送一個空白行,標識發(fā)送HTTP頭部結束
BaseHTTPRequestHandler.wfile ? ?#self.connection.makefile('rb', self.wbufsize) self.wbufsize = -1 應答的HTTP文本流對象,可寫入應答信息
BaseHTTPRequestHandler.rfile ? ?#self.connection.makefile('wb', self.rbufsize) self.rbufsize = 0 ?請求的HTTP文本流對象,可讀取請求信息

cgi.parse_header(string)

解析HTTP報頭字段(如'content-type’ )之后提供的數(shù)據(jù)。
數(shù)據(jù)將被分解為一個主值和一個次要參數(shù)的字典、并以元組的形式返回。

到此這篇關于Python中BaseHTTPRequestHandler實現(xiàn)簡單的API接口的文章就介紹到這了,更多相關BaseHTTPRequestHandler實現(xiàn)API接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python使用OS模塊操作系統(tǒng)接口及常用功能詳解

    python使用OS模塊操作系統(tǒng)接口及常用功能詳解

    os是?Python?標準庫中的一個模塊,提供了與操作系統(tǒng)交互的功能,在本節(jié)中,我們將介紹os模塊的一些常用功能,并通過實例代碼詳細講解每個知識點
    2023-06-06
  • python中關于時間和日期函數(shù)的常用計算總結(time和datatime)

    python中關于時間和日期函數(shù)的常用計算總結(time和datatime)

    python中關于時間和日期函數(shù)有time和datatime使用介紹,需要的朋友可以參考下
    2013-03-03
  • 7個Python中的隱藏小技巧分享

    7個Python中的隱藏小技巧分享

    Python 是每個程序員都喜歡的語言,因為它易于編碼和易于閱讀的語法。但是,你知道 python 有一些很酷的技巧可以用來讓事情變得更簡單嗎?在今天的內(nèi)容中,我將與你分享7 個你可能從未使用過的Python 技巧
    2023-03-03
  • Python實現(xiàn)的監(jiān)測服務器硬盤使用率腳本分享

    Python實現(xiàn)的監(jiān)測服務器硬盤使用率腳本分享

    這篇文章主要介紹了Python實現(xiàn)的監(jiān)測服務器硬盤使用率腳本分享,本文腳本適應windows和linux系統(tǒng),需要的朋友可以參考下
    2014-11-11
  • Win10下安裝CUDA11.0+CUDNN8.0+tensorflow-gpu2.4.1+pytorch1.7.0+paddlepaddle-gpu2.0.0

    Win10下安裝CUDA11.0+CUDNN8.0+tensorflow-gpu2.4.1+pytorch1.7.0+p

    這篇文章主要介紹了Win10下安裝CUDA11.0+CUDNN8.0+tensorflow-gpu2.4.1+pytorch1.7.0+paddlepaddle-gpu2.0.0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python如何爬取實時變化的WebSocket數(shù)據(jù)的方法

    Python如何爬取實時變化的WebSocket數(shù)據(jù)的方法

    這篇文章主要介紹了Python如何爬取實時變化的WebSocket數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Python namedtuple命名元組實現(xiàn)過程解析

    Python namedtuple命名元組實現(xiàn)過程解析

    這篇文章主要介紹了Python namedtuple命名元組實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 使用Selenium破解新浪微博的四宮格驗證碼

    使用Selenium破解新浪微博的四宮格驗證碼

    今天小編就為大家分享一篇關于使用Selenium破解新浪微博的四宮格驗證碼的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 使用python統(tǒng)計文件行數(shù)示例分享

    使用python統(tǒng)計文件行數(shù)示例分享

    當文件的尺寸非常大的時候(10G之上吧),想知道行數(shù)是個問題,提供一個使用python統(tǒng)計文件行數(shù)的示例,需要的朋友可以參考下
    2014-02-02
  • Python3學習筆記之列表方法示例詳解

    Python3學習筆記之列表方法示例詳解

    Python3 列表 序列是Python中最基本的數(shù)據(jù)結構,下面這篇文章主要給大家介紹了關于Python3學習筆記之列表方法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下。
    2017-10-10

最新評論