亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Python中的plisttext和HTTP的Content-Type

Galence / 1279人閱讀

摘要:在的中會使用到,因為請求提交了很多類型的數(shù)據(jù),所以必須使用進行間隔,也就是所謂的時的格式。詳細的的格式在的文檔中有詳細的介紹。這里貼一張截獲的包的信息,來幫助大家理解一下這段代碼的原理。通過提交一份文件和一個名為的字符串。

?這段時間本人在學(xué)習(xí)Android Service相關(guān)的內(nèi)容,臨時需要一個可以提供文件上傳和下載功能的服務(wù)器,于是上網(wǎng)查找了一個簡單服務(wù)器的python實現(xiàn)代碼,本著溫顧一下HTTP協(xié)議的想法,于是深入研究了一下其中的代碼,發(fā)現(xiàn)大家對SimpleHTTPRequestsHandler中的self.headers.plisttext.split("=")[1]語句的含義不是很理解,于是自己查閱了一下python源碼定義和相關(guān)HTTP協(xié)議文檔,理解了這段代碼的含義。

源碼定義

?我們先來看一下關(guān)于plisttext的源碼定義。

#https://svn.python.org/projects/python/branches/alpha100/Lib/mimetools.py
class Message(rfc822.Message):
    def __init__(self, fp):
    ....
        self.typeheader = 
            self.getheader("content-type")
        ....
    def parsetype(self):
        str = self.typeheader
        if str == None:
            str = "text/plain"
        if ";" in str:
            i = string.index(str, ";")
            self.plisttext = str[i:]
            str = str[:i]
        else:
            self.plisttext = ""
        ....

?從源碼中可以得出,plisttext與HTTP頭部content-type有關(guān),這里我們就要回想一下content-type的有關(guān)定義了。
?在w3c的文檔給出了content-type的格式定義,我們可以發(fā)現(xiàn),content-type對的值有可選的內(nèi)容,使用隔開,所以plisttext的值就是parameter的內(nèi)容。

Content-Type := type "/" subtype *[";" parameter] 

type :=          "application"     / "audio" 
          / "image"           / "message" 
          / "multipart"  / "text" 
          / "video"           / x-token 

x-token :=  

subtype := token 

parameter := attribute "=" value 

attribute := token 

value := token / quoted-string 

token := 1* 

tspecials :=  "(" / ")" / "<" / ">" / "@"  ; Must be in 
           /  "," / ";" / ":" / "" / <">  ; quoted-string, 
           /  "/" / "[" / "]" / "?" / "."  ; to use within 
           /  "="                        ; parameter values 
使用原理

?知道了plisttext代表的含義,我們再來看一下它在文件上傳過程中的作用吧。我們先來看一下它在處理文件上傳的post請求時的作用吧。

boundary = self.headers.plisttext.split("=")[1]
remainbytes = int(self.headers["content-length"])
line = self.rfile.readline()
remainbytes -= len(line)
if not boundary in line:
    return (False,"Content NOT begin with boundary")
line = self.rfile.readline()
remainbytes -= len(line)
filename = re.findall(r"Content-Disposition.*name="file"; filename="(.*)"",line)
if not fn:
    return (False,"Can"t find out file name")

?我們都知道當通過htmlform來進行文件提交時,瀏覽器會發(fā)送POST請求,并且content-type為multipart/form-data; boundary=----WebKitFormBoundaryqdHXHkzdBEGWWZka,所以,plisttext的值為boundary=----WebKitFormBoundaryqdHXHkzdBEGWWZka。boundaryHTTP的body中會使用到,因為post請求提交了很多類型的數(shù)據(jù),所以必須使用boundary進行間隔,也就是所謂的Multipart Content-Type時的body格式。詳細的body的格式在w3c的文檔中有詳細的介紹。

?這里貼一張wireShark截獲的tcp包的信息,來幫助大家理解一下這段python代碼的原理。通過form提交一份文件和一個名為other的字符串。

 POST / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 269353
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.81 Chrome/43.0.2357.81 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryqdHXHkzdBEGWWZka
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4

------WebKitFormBoundaryqdHXHkzdBEGWWZka
Content-Disposition: form-data; name="file"; filename="AndroidStudy.png"
Content-Type: image/png
..... //圖片內(nèi)容
------WebKitFormBoundaryqdHXHkzdBEGWWZka
Content-Disposition: form-data; name="other"

ffffd
------WebKitFormBoundaryqdHXHkzdBEGWWZka--

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/37988.html

相關(guān)文章

  • 京東云 OpenAPI 簽名機制 Python 實現(xiàn)

    摘要:京東云是將京東云所有資源的管理能力通過的方式提供出來,供京東云用戶和合作伙伴使用。是京東云控制臺的有效補充,方便用戶更靈活的控制自己的云上資源。在開始調(diào)用京東云之前,需提前在京東云用戶中心賬戶管理下的管理頁面申請和密鑰對簡稱。 京東云OpenAPI是將京東云所有資源的管理能力通過API的方式提供出來,供京東云用戶和合作伙伴使用。OpenAPI是京東云控制臺的有效補充,方便用戶更靈活的控...

    khs1994 評論0 收藏0
  • Flask 擴展系列之 Flask-RESTful

    摘要:勵以最少的安裝方式進行最佳實踐。上面的例子接收了一個對象并準備將其序列化。裝飾器會通過進行轉(zhuǎn)換。從對象中提取的唯一字段是。是一個特殊的字段,它接受端點名稱并為響應(yīng)中的端點生成一個??梢圆榭错棽榭赐暾斜?。 大綱 簡介 安裝 快速入門 一個最小的 api 例子 資源豐富的路由 端點 參數(shù)解析 數(shù)據(jù)格式化 完整 TODO 應(yīng)用例子 簡介 Flask-RESTful是一個Flas...

    阿羅 評論0 收藏0
  • 基于Python+DjangoKubernetes集群管理平臺

    摘要:淺述集群日常管理維護中的一些痛點較為龐大的集群規(guī)模及容器數(shù)量維護管理。同時為了便于分類管理,避免端口沖突和資源合理利用。測試環(huán)境維護管理問題。測試版是基于與的運維管理系統(tǒng)。 原文出自【聽云技術(shù)博客】:http://blog.tingyun.com/web/a...時至今日,接觸kubernetes也有一段時間了,而我們的大部分業(yè)務(wù)也已經(jīng)穩(wěn)定地運行在不同規(guī)模的kubernetes集群上,...

    animabear 評論0 收藏0
  • HTTPie 官方文檔中文翻譯版

    摘要:目標是讓與的交互盡可能的更友好。在版本以上已經(jīng)成為了默認的版本。不同類型的鍵值對分割符號分別是。這將會協(xié)商服務(wù)端和你安裝的支持的最高協(xié)議版本。 博客原文? HTTPie 是一個命令行 HTTP 客戶端。目標是讓 CLI 與 Web services 的交互盡可能的更友好。它提供了一個簡單的 http 命令,可以讓我們用簡單自然的表述發(fā)送任意 HTTP 請求,并且可以輸出帶代碼高亮的結(jié)果...

    Baaaan 評論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---15、爬蟲基礎(chǔ):HTTP基本原理

    摘要:上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)部署相關(guān)庫的安裝下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)網(wǎng)頁基礎(chǔ)在寫爬蟲之前,還是需要了解一些爬蟲的基礎(chǔ)知識,如原理網(wǎng)頁的基礎(chǔ)知識爬蟲的基本原理基本原理等。由萬維網(wǎng)協(xié)會和工作小組共同合作制定的規(guī)范,目前廣泛使用的是版本。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---14、部署相關(guān)庫的安裝:Scrapyrt、Gerapy下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)...

    codeGoogle 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<