详解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中使用中文的方法
Feb 19 Python
Python中的列表知识点汇总
Apr 14 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python3.5基于TCP实现文件传输
Mar 20 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Django如何自定义分页
Sep 25 Python
python查看模块,对象的函数方法
Oct 16 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
python数字图像处理:图像的绘制
Jun 28 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
js自定义事件代码说明
2011/01/31 Javascript
javascript基本类型详解
2014/11/28 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
详解JS函数防抖
2020/06/05 Javascript
python实现将元祖转换成数组的方法
2015/05/04 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python实现简单遗传算法
2018/03/19 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python调用自定义函数的实例操作
2019/06/26 Python
Python如何实现线程间通信
2020/07/30 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
售后服务科岗位职责范文
2013/11/13 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
社区娱乐活动方案
2014/08/21 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
工程服务质量承诺书
2015/04/29 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
解决numpy数组互换两行及赋值的问题
2021/04/17 Python
Django cookie和session的应用场景及如何使用
2021/04/29 Python