详解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实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
python中for循环变量作用域及用法详解
Nov 05 Python
python文件操作的简单方法总结
Nov 07 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
Python命令行click参数用法解析
Dec 19 Python
python3注册全局热键的实现
Mar 22 Python
OpenCV 之按位运算举例解析
Jun 19 Python
python操作xlsx格式文件并读取
Jun 02 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
为什么夜间收到的中波电台比白天多
2021/03/01 无线电
PHP应用JSON技巧讲解
2013/02/03 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
图解js图片轮播效果
2015/12/20 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
BootStrap 导航条实例代码
2017/05/18 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
Python中运行并行任务技巧
2015/02/26 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
快速了解Python相对导入
2018/01/12 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
详解Python设计模式之策略模式
2020/06/15 Python
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
简历自我评价怎么写呢?
2014/01/06 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
教师业务培训方案
2014/05/01 职场文书
高三语文教学反思
2016/02/16 职场文书
初三语文教学反思
2016/03/03 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL