zoukankan      html  css  js  c++  java
  • python3实现的web端json通信协议

    之前有用python3实现过tcp协议的,后来又实现了http协议的通信,今天公司想做一个功能自动测试系统,

    下午弄了一会,发现json格式的实现可以更简单一点,代码如下:简单解说一下,一般与服务器通信分两块,一块是get协议,一块是post协议,

    get协议很简单,直接就可访问了,post协议,实际上把data数据用起来,程序直接会自动辨别类型。

    在写的过程中遇到3个问题:

    1 在实现post协议时曾遇到错误,

    大致说数据格式的问题,解决方法很简单,转为utf-8格式:bytes(data, 'utf8') ,

    2 获取到的json数据遇到里面中文时遇到编码问题

    发现表现出0xaa0xbb0xcc0xdd这样的编码,json加载时调用utf8即可,使用这一句代码:json.loads(rawtext.decode('utf8'))

    3 打印出json时表现出一行很长很长的字符串

    长长的字符串看了非常痛苦,根本看不清json里面各对像的关系,网上说用什么json.tool方法解决,不过那是针对命令行的,我这是在调试过程中还是希望直接打印出来,

    采用如下代码:print (json.dumps(jsonStr, sort_keys=False, ensure_ascii= False, indent=2)) ,这里需要注意ensure_ascii必须为False,否则里面有中文时

    看到的又是0xx什么的,indent=2表示格式化json显示,sort_keys则表示此json无需排序

    #!/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)
  • 相关阅读:
    如何用jquery实现实时监控浏览器宽度
    关于oracle with as用法
    SQL查询语句,怎样查询重复数据
    Axure RP Pro7.0的key注册码加汉化非破解
    秦曾昌人工智能课程---7、决策树集成学习Tree Ensembles
    秒懂机器学习---分类回归树CART
    秒懂机器学习---朴素贝叶斯
    秒懂机器学习---k临近算法(KNN)
    秒懂机器学习---机器学习无法逃避的梯度下降法
    秒懂机器学习---当机器学习遇上决策树....
  • 原文地址:https://www.cnblogs.com/luhouxiang/p/6231278.html
Copyright © 2011-2022 走看看