Home  >  Article  >  Backend Development  >  Detailed explanation of the web-side json communication protocol implemented by python3

Detailed explanation of the web-side json communication protocol implemented by python3

高洛峰
高洛峰Original
2017-02-11 13:21:211814browse

This article mainly introduces the web-side json communication protocol implemented by python3. It has certain reference value. Interested friends can refer to it.

I used python3 to implement the tcp protocol before, and later implemented the http protocol communication. Today the company wants to make a functional automatic test system.

After working on it for a while in the afternoon, I found that the json format The implementation can be simpler. The code is as follows: To explain briefly, communication with the server is generally divided into two parts, one is the get protocol and the other is the post protocol.

The get protocol is very simple and can be accessed directly. The post protocol , in fact, when data is used, the program will automatically identify the type.

I encountered three problems during the writing process:

1 I encountered an error when implementing the post protocol.

Generally speaking, the problem of data format is very easy to solve. Simple, convert to utf-8 format: bytes(data, 'utf8'),

2 The obtained json data encounters encoding problems when it encounters Chinese inside

It is found that it shows 0xaa0xbb0xcc0xdd like this For encoding, just call utf8 when loading json. Use this code: json.loads(rawtext.decode('utf8'))

3 When printing out json, a very long string will appear.

It’s very painful to read long strings, and I can’t clearly see the relationship between the objects in json. The Internet says what json.tool method should be used to solve it, but that is for the command line. I am here During the debugging process, you still want to print it out directly.

Use the following code: print (json.dumps(jsonStr, sort_keys=False, ensure_ascii= False, indent=2)). It should be noted here that ensure_ascii must be False, otherwise When there is Chinese in it, what you see is 0xx or something. indent=2 means formatted json display, and sort_keys means that this json does not need to be sorted.


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


The above is the entire content of this article. I hope it will be helpful to everyone’s learning. I also hope that everyone will support the PHP Chinese website.

For more detailed articles on the web-side json communication protocol implemented by python3, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn