クライアント、サーバの動作が不明ですが、以下のような通常のコードでのやりとりであれば、dic1
をそのまま渡すだけで文字化けなく処理できます。
クライアント
Python
1import requests
2
3url = 'http://localhost:8000/'
4headers = {'content-type': 'application/json'}
5
6dic1 = {"data": "\u307b\u3052"}
7dic2 = {"data": "ほげ"}
8for d in [dic1,dic2]:
9 requests.post(url, headers=headers, json=d)
サーバ:参考(curlのGET,POSTのデータを確認)
Python
1# curlのGET,POSTのデータを確認
2# https://qiita.com/tkj/items/210a66213667bc038110
3
4import os
5import http.server as s
6from urllib.parse import urlparse
7from urllib.parse import parse_qs
8
9import json
10
11class MyHandler(s.BaseHTTPRequestHandler):
12 def do_POST(self):
13 self.make_data()
14 def do_GET(self):
15 self.make_data()
16 def make_data(self):
17 # urlパラメータを取得
18 parsed = urlparse(self.path)
19 # urlパラメータを解析
20 params = parse_qs(parsed.query)
21 # body部を取得
22 content_len = int(self.headers.get("content-length"))
23 req_body = self.rfile.read(content_len).decode("utf-8")
24 # 返信を組み立て
25 body = "method: " + str(self.command) + "\n"
26 body += "params: " + str(params) + "\n"
27 body += "body : " + req_body + "\n"
28
29 # 確認表示
30 print(body)
31 d = json.loads(req_body)
32 print(d)
33
34 self.send_response(200)
35 self.send_header('Content-type', 'text/html; charset=utf-8')
36 self.send_header('Content-length', len(body.encode()))
37 self.end_headers()
38 self.wfile.write(body.encode())
39
40host = '0.0.0.0'
41port = 8000
42httpd = s.HTTPServer((host, port), MyHandler)
43print('サーバを起動しました。ポート:%s' % port)
44httpd.serve_forever()
サーバログ
サーバを起動しました。ポート:8000
method: POST
params: {}
body : {"data": "\u307b\u3052"}
{'data': 'ほげ'}
127.0.0.1 - - [29/Jul/2020 14:40:09] "POST / HTTP/1.1" 200 -
method: POST
params: {}
body : {"data": "\u307b\u3052"}
{'data': 'ほげ'}
127.0.0.1 - - [29/Jul/2020 14:40:11] "POST / HTTP/1.1" 200 -