详解python3实现的web端json通信协议

 更新时间:2016年12月29日 09:58:55   作者:绿色的麦田  
本篇文章主要介绍了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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python基于钉钉监控发送消息提醒的实现

    Python基于钉钉监控发送消息提醒的实现

    本文主要介绍了Python基于钉钉监控发送消息提醒的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • pycharm 如何跳出服务器证书不受信任的提示

    pycharm 如何跳出服务器证书不受信任的提示

    这篇文章主要介绍了pycharm 跳出服务器证书不受信任的提示操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python爬虫中IP池的使用小结

    Python爬虫中IP池的使用小结

    在网络爬虫的世界中,IP池是一个关键的概念,它允许爬虫程序在请求网页时使用多个IP地址,从而降低被封禁的风险,提高爬虫的稳定性和效率,本文将深入探讨Python爬虫中IP池的使用,以及如何构建和维护一个可靠的IP池,感兴趣的朋友一起看看吧
    2024-01-01
  • Python代码实现删除一个list里面重复元素的方法

    Python代码实现删除一个list里面重复元素的方法

    今天小编就为大家分享一篇关于Python代码实现删除一个list里面重复元素的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • Python将大量遥感数据的值缩放指定倍数的方法(推荐)

    Python将大量遥感数据的值缩放指定倍数的方法(推荐)

    本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像文件的方法,感兴趣的朋友一起看看吧
    2025-01-01
  • 使用Python进行SSH和文件传输实现方法实例

    使用Python进行SSH和文件传输实现方法实例

    这篇文章主要为大家介绍了使用Python进行SSH和文件传输实现方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 详解如何使用python创建和结束线程

    详解如何使用python创建和结束线程

    线程的创建和结束是多线程编程中的核心概念之一,在本文中,我们将学习如何使用 Python 创建线程,并探讨如何优雅地结束线程,需要的朋友可以参考下
    2024-04-04
  • 解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题

    解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题

    这篇文章主要介绍了解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题,本文给大家提供两种解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 详解pytorch的多GPU训练的两种方式

    详解pytorch的多GPU训练的两种方式

    本文主要介绍了详解pytorch的多GPU训练的两种方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • python中round函数保留两位小数的方法

    python中round函数保留两位小数的方法

    在本篇内容里小编给各位分享的是一篇关于python中round函数保留两位小数的方法及相关知识点,有兴趣的朋友们可以学习下。
    2020-12-12

最新评论