Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des von Python3 implementierten webseitigen JSON-Kommunikationsprotokolls

Detaillierte Erläuterung des von Python3 implementierten webseitigen JSON-Kommunikationsprotokolls

高洛峰
高洛峰Original
2017-02-11 13:21:211770Durchsuche

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)


Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Lernen aller hilfreich sein , und ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.

Ausführlichere Artikel zum von Python3 implementierten webseitigen JSON-Kommunikationsprotokoll finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn