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


Posted in Python onDecember 29, 2016

之前有用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内置的字符串处理函数详细整理(覆盖日常所用)
Aug 19 Python
Python中函数参数设置及使用的学习笔记
May 03 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
matplotlib给子图添加图例的方法
Aug 03 Python
Python并行分布式框架Celery详解
Oct 15 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 25 Python
Python正则表达式如何进行字符串替换实例
Dec 28 #Python
Python写的一个定时重跑获取数据库数据
Dec 28 #Python
Python 实现文件的全备份和差异备份详解
Dec 27 #Python
Python Queue模块详细介绍及实例
Dec 27 #Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 #Python
Python 递归函数详解及实例
Dec 27 #Python
python实现二维码扫码自动登录淘宝
Dec 27 #Python
You might like
怎样在UNIX系统下安装php3
2006/10/09 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
解决Idea、WebStorm下使用Vue cli脚手架项目无法使用Webpack别名的问题
2019/10/11 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
python使用PyGame播放Midi和Mp3文件的方法
2015/04/24 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
使用python获取邮箱邮件的设置方法
2019/09/20 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
详细分析Python collections工具库
2020/07/16 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
如何实现一个自定义类的序列化
2012/05/22 面试题
毕业生的自我评价分享
2013/12/18 职场文书
试用期转正鉴定评语
2014/01/27 职场文书
音乐教学案例
2014/01/30 职场文书
专业技术职务聘任书
2014/03/29 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
农村党员干部承诺书
2015/05/04 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书