最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

BaseHTTPRequestHandler介紹

這是一個(gè)以TCPServer為基礎(chǔ)開發(fā)的模塊,可以在請(qǐng)求外層添加http協(xié)議報(bào)文,發(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) ?# 獲取請(qǐng)求的url
? ? ? ? ? ? if path == '/api/counting/':
? ? ? ? ? ? ? ? # print(path)
? ? ? ? ? ? ? ? length = int(self.headers['content-length']) ?# 獲取除頭部后的請(qǐng)求參數(shù)的長度
? ? ? ? ? ? ? ? datas = self.rfile.read(length) # 獲取請(qǐng)求參數(shù)數(shù)據(jù),請(qǐng)求數(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']) ?# 獲取除頭部后的請(qǐng)求參數(shù)的長度
? ? ? ? ? ? ? ? datas = self.rfile.read(length) # 獲取請(qǐng)求參數(shù)數(shù)據(jù),請(qǐng)求數(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()

請(qǐng)求代碼

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:

主要包含兩個(gè)類HTTPServer和BaseHTTPRequestHandler

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

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

HTTPServer綁定對(duì)應(yīng)的應(yīng)答類(BaseHTTPRequestHandler )

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

監(jiān)聽端口:

http_server.serve_forever()

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

應(yīng)答:

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

常用方法/屬性:

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

cgi.parse_header(string)

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

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

相關(guān)文章

  • Django中如何使用Channels功能

    Django中如何使用Channels功能

    這篇文章主要介紹了在Django中使用Channels功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 使用Pandas進(jìn)行均值填充的實(shí)現(xiàn)

    使用Pandas進(jìn)行均值填充的實(shí)現(xiàn)

    缺失數(shù)據(jù)(NaN 值)是一個(gè)常見的問題,我們可以通過多種方法來處理缺失數(shù)據(jù),其中一種常用的方法是均值填充,本文主要介紹了使用Pandas進(jìn)行均值填充的實(shí)現(xiàn),感興趣的可以了解一下
    2025-04-04
  • Python?字典中鍵映射多個(gè)值的問題解決

    Python?字典中鍵映射多個(gè)值的問題解決

    本文主要介紹了在Python中實(shí)現(xiàn)一個(gè)字典multidict中鍵可以對(duì)應(yīng)多個(gè)值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Python使用filetype精確判斷文件類型

    Python使用filetype精確判斷文件類型

    判斷文件類型在開發(fā)中非常常見的需求,怎樣才能準(zhǔn)確的判斷文件類型呢?首先大家想到的是文件的后綴,但是非常遺憾的是這種方法是非常不靠譜的,因?yàn)槲募暮缶Y是可以隨意更改的,而python中有個(gè)小插件可以實(shí)現(xiàn),下面我們就來詳細(xì)探討下
    2017-07-07
  • Python使用PIL庫拼接圖片的詳細(xì)教程

    Python使用PIL庫拼接圖片的詳細(xì)教程

    在圖像處理中,拼接圖片是一項(xiàng)常見的任務(wù),無論是為了創(chuàng)建全景圖、合并多張圖片,還是為了展示對(duì)比,拼接圖片都能帶來很大的便利,Python的Pillow庫(PIL的一個(gè)分支)提供了強(qiáng)大的圖像處理功能,包括圖片的拼接,下面是一個(gè)詳細(xì)的教程,需要的朋友可以參考下
    2024-12-12
  • python實(shí)現(xiàn)自動(dòng)生成SQL語句

    python實(shí)現(xiàn)自動(dòng)生成SQL語句

    在數(shù)據(jù)處理和管理中,SQL(Structured?Query?Language)是一種非常重要的語言,本文主要介紹了如何使用python實(shí)現(xiàn)自動(dòng)生成SQL語句,需要的可以參考下
    2024-04-04
  • Python實(shí)現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句

    Python實(shí)現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)剪貼板中轉(zhuǎn)換C語言代碼為printf語句,可以用于運(yùn)行代碼的追蹤,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2026-02-02
  • Python3.6簡單操作Mysql數(shù)據(jù)庫

    Python3.6簡單操作Mysql數(shù)據(jù)庫

    這篇文章主要為大家詳細(xì)介紹了Python3.6簡單操作Mysql數(shù)據(jù)庫,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 淺析Python中的join()方法的使用

    淺析Python中的join()方法的使用

    這篇文章主要介紹了Python中的join()方法的使用,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Centos部署django服務(wù)nginx+uwsgi的方法

    Centos部署django服務(wù)nginx+uwsgi的方法

    這篇文章主要介紹了Centos部署django服務(wù)nginx+uwsgi的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01

最新評(píng)論

荣成市| 安远县| 龙门县| 沅江市| 张家港市| 汕头市| 浦城县| 毕节市| 天台县| 甘南县| 昭通市| 云安县| 新民市| 含山县| 从江县| 河池市| 柞水县| 高台县| 台北县| 汤阴县| 黑山县| 昆山市| 威宁| 晋中市| 交口县| 达日县| 龙州县| 鄂州市| 本溪市| 文安县| 祁阳县| 永康市| 呼图壁县| 尉犁县| 通州区| 麻江县| 永昌县| 七台河市| 大姚县| 蕲春县| 中西区|