In diesem Artikel wird hauptsächlich das von Python3 implementierte webseitige JSON-Kommunikationsprotokoll vorgestellt. Es hat einen gewissen Referenzwert.
Ich habe zuvor Python3 verwendet, um das TCP-Protokoll zu implementieren. Heute möchte das Unternehmen ein funktionierendes automatisches Testsystem erstellen.
Nachdem ich eine Weile daran gearbeitet habe Am Nachmittag stellte ich fest, dass die Implementierung des JSON-Formats einfacher sein kann. Der Code lautet wie folgt: Um es kurz zu erklären: Die Kommunikation mit dem Server ist im Allgemeinen in zwei Teile unterteilt, einen ist das Get-Protokoll und der andere ist das Post-Protokoll.
Das Get-Protokoll ist sehr einfach und kann direkt auf das Post-Protokoll zugegriffen werden. Wenn Daten verwendet werden, erkennt das Programm tatsächlich den Typ.
Ich bin während des Schreibvorgangs auf 3 Probleme gestoßen:
1 Bei der Implementierung des Post-Protokolls ist ein Fehler aufgetreten
Im Allgemeinen ist das Problem des Datenformats sehr einfach Lösen. Einfach, in das UTF-8-Format konvertieren: bytes(data, 'utf8') ,
2 Die erhaltenen JSON-Daten stießen auf Kodierungsprobleme, als sie auf Chinesisch in
stießen und stellten fest, dass 0xaa0xbb0xcc0xdd angezeigt wurde Rufen Sie zum Codieren einfach utf8 auf, wenn Sie JSON laden. Verwenden Sie diesen Code: json.loads(rawtext.decode('utf8'))
3 Beim Ausdrucken von JSON wird eine sehr lange Zeichenfolge angezeigt >
Es ist sehr schmerzhaft, lange Zeichenfolgen zu lesen, und ich kann die Beziehung zwischen den Objekten in JSON nicht klar erkennen. Es gibt einige json.tool-Methoden im Internet, um das Problem zu lösen, aber das ist für die Befehlszeile. Ich bin hier Während des Debugging-Prozesses möchten Sie es trotzdem direkt ausdrucken verwendet den folgenden Code: print (json.dumps(jsonStr, sort_keys=False,sure_ascii=False,indent=2)). Hier ist zu beachten, dass „sure_ascii“ „False“ sein muss, andernfalls „Wenn Chinesisch drin ist“ , sehen Sie 0xx oder so, indent=2 bedeutet formatierte JSON-Anzeige, sort_keys bedeutet, dass dieser JSON nicht sein muss sortiert
#!/usr/bin/evn python3 #coding=utf-8 # 针对web端json协议的通信库,通信协议为json,传出的data为json格式,接收的数据也是json格式 # 外界调用时可先初始化web_json类,如下所示: # get调用 # web = web_json("http://baidu.com/") # params = "abcd/select/100000?userID=1234&groupID=79" # web.url_get(params) # # post调用 # web = web_json("http://baidu.com/") # params = "abcd/select/100000" # data = '{"name": "jack", "id": "1"}' # web.url_post(params, data) from urllib.request import urlopen from urllib.parse import quote import json class web_json: def __init__(self, base_url): self.base_url = base_url def get_url_data(self, params, data): web = urlopen(self.base_url + params, data) print (web.url) print ("status: " , web.status) rawtext = web.read() jsonStr = json.loads(rawtext.decode('utf8')) print (json.dumps(jsonStr, sort_keys=False, ensure_ascii= False, indent=2)) return jsonStr # get方法 def url_get(self, params): return self.get_url_data(params, None) # post方法 def url_post(self, params, data): data=bytes(data, 'utf8') return self.get_url_data(params, data)