详解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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
win与linux系统中python requests 安装
Dec 04 Python
python 文件操作删除某行的实例
Sep 04 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
解读python如何实现决策树算法
Oct 11 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
pytorch实现线性拟合方式
Jan 15 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python发送邮件实现基础解析
Aug 14 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 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
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
制作安全性高的PHP网站的几个实用要点
2014/12/30 PHP
php和html的区别点详细总结
2019/09/24 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
[JSF]使用DataModel处理表行事件的实例代码
2013/08/05 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
详解JS函数重载
2014/12/04 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
js流动式效果显示当前系统时间
2016/05/16 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
js模拟微博发布消息
2017/02/23 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
树莓派采用socket方式文件传输(python)
2019/06/22 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
探矿工程师自荐信
2014/01/24 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL