详解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通过websocket与js客户端通信示例分析
Jun 25 Python
gearman的安装启动及python API使用实例
Jul 08 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
python2.7安装图文教程
Mar 13 Python
python获取中文字符串长度的方法
Nov 14 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
python面向对象法实现图书管理系统
Apr 19 Python
解析python的局部变量和全局变量
Aug 15 Python
python实现梯度法 python最速下降法
Mar 24 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
Function eregi is deprecated (解决方法)
2013/06/21 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
JavaScript的Vue.js库入门学习教程
2016/05/23 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
python字符串,数值计算
2016/10/05 Python
Python中sorted()排序与字母大小写的问题
2020/01/14 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
班主任工作年限证明
2014/01/12 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
年会搞笑主持词
2014/03/27 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
见习报告格式范文
2014/11/08 职场文书
先进工作者申报材料
2014/12/23 职场文书
涨价通知怎么写
2015/04/23 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
vue实力踩坑之push当前页无效
2022/04/10 Vue.js