Maison  >  Article  >  développement back-end  >  Explication détaillée du protocole de communication json côté Web implémenté par python3

Explication détaillée du protocole de communication json côté Web implémenté par python3

高洛峰
高洛峰original
2017-02-11 13:21:211814parcourir

Cet article présente principalement le protocole de communication json côté Web implémenté par python3. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer.

J'ai utilisé python3 pour implémenter le protocole TCP auparavant, puis j'ai implémenté le protocole de communication http. Aujourd'hui, l'entreprise souhaite créer un système de test automatique fonctionnel

Après avoir travaillé dessus pendant un certain temps. dans l'après-midi, j'ai trouvé que le format json La mise en œuvre peut être plus simple. Le code est le suivant : Pour expliquer brièvement, la communication avec le serveur est généralement divisée en deux parties, l'une est le protocole get et l'autre est le protocole post.

Le protocole get est très simple et est accessible directement. Le protocole post , en effet, lorsque des données sont utilisées, le programme identifiera automatiquement le type.

J'ai rencontré 3 problèmes lors du processus d'écriture :

1 J'ai rencontré une erreur lors de la mise en œuvre du protocole de publication

De manière générale, le problème du format des données est très simple à résoudre. résoudre. Simple, convertir au format utf-8 : bytes(data, 'utf8') ,

2 Les données json obtenues ont rencontré des problèmes d'encodage lors de la rencontre du chinois à l'intérieur de

et ont constaté qu'elles affichaient 0xaa0xbb0xcc0xdd. comme ça Pour l'encodage, appelez simplement utf8 lors du chargement de json. Utilisez ce code : json.loads(rawtext.decode('utf8'))

3 Lors de l'impression de json, une très longue chaîne apparaîtra

C'est très pénible de lire de longues chaînes, et je ne vois pas clairement la relation entre les objets dans json. Il existe des méthodes json.tool sur Internet pour résoudre le problème, mais c'est pour la ligne de commande. Je suis ici Pendant le processus de débogage, vous souhaitez toujours l'imprimer directement

utilise le code suivant : print (json.dumps(jsonStr, sort_keys=False, Ensure_ascii= False, indent=2)). Il convient de noter ici que Ensure_ascii doit être False, sinon lorsqu'il contient du chinois

, ce que vous voyez est 0xx ou quelque chose du genre, indent=2 signifie un affichage json formaté, sort_keys signifie que ce json n'a pas besoin d'être trié



#!/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)


Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. , et j'espère aussi que tout le monde soutiendra le site Web PHP chinois.

Pour des articles plus détaillés sur le protocole de communication json côté Web implémenté par python3, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn