详解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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
Python_LDA实现方法详解
Oct 25 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Python简单I/O操作示例
Mar 18 Python
python反编译学习之字节码详解
May 19 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 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
打造计数器DIY三步曲(下)
2006/10/09 PHP
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
jQuery中find()方法用法实例
2015/01/07 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
在windows系统中实现python3安装lxml
2016/03/23 Python
Python 类的继承实例详解
2017/03/25 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
美国智能家居专家:tink
2019/06/04 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
公司活动邀请函
2014/01/24 职场文书
2014年党支部学习材料
2014/05/19 职场文书
食品安全承诺书范文
2014/08/29 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js