簡體   English   中英

http.server:將POST請求解碼為JSON

[英]http.server: decoding POST request to JSON

我正在寫一個基於http.server的非常簡單的http服務器(使用Python-3)

客戶端應該通過POST發送json對象。

payload={'text': 'bi ba buzemann!',
         'nouns': ['streetlight', 'situation'],
         'states': ['solid', 'fluid']
        }
requests.post(url, data=payload)

這可以很好地到達服務器,但是以序列化形式

def do_POST(self:
  length = self.headers['content-length']
  data = self.rfile.read(int(length))
  # b'states=solid&states=fluid&nouns=oracle&text=bi+ba+buzemann%21'

現在我的問題是:如何將經過urlencoded的結果轉換回字典(或中間JSON)?

我是否必須手動執行此操作,如:

for x in str(r).split('&'):
   y,z=x.split('=')
   if not y in d:
      d[y]=[]
   d[y]+=[urllib.parse.unquote_plus(z)]

還是在某些通用模塊中提供了一些經過調試的功能?

如果可以更改請求,則以JSON發送:

import json
payload={'text': 'bi ba buzemann!',
         'nouns': ['streetlight', 'situation'],
         'states': ['solid', 'fluid']
        }
requests.post(url, data=json.dumps(payload))

您可以這樣使用parse_qs

>>> from urllib.parse import parse_qs
>>> parse_qs(b'states=solid&states=fluid&nouns=oracle&text=bi+ba+buzemann%21')
{b'nouns': [b'oracle'], b'text': [b'bi ba buzemann!'], b'states': [b'solid', b'fluid']}

解析作為字符串參數給出的查詢字符串(類型為application / x-www-form-urlencoded的數據)。 數據作為字典返回。

因此,如果您的客戶端應該發送json,請使用@BrentWashBurne的想法將其發布為json。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM