详解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的一些用法分享
Oct 07 Python
python中类的一些方法分析
Sep 25 Python
关于python的list相关知识(推荐)
Aug 30 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
python获取本机所有IP地址的方法
Dec 26 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Django中的session用法详解
Mar 09 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
Python基于traceback模块获取异常信息
Jul 23 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
中英文字符串翻转函数
2008/12/09 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
php命名空间学习详解
2014/02/27 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
js 颜色选择插件
2017/01/23 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
python实现图片处理和特征提取详解
2017/11/13 Python
Python元组及文件核心对象类型详解
2018/02/11 Python
多个应用共存的Django配置方法
2018/05/30 Python
python设定并获取socket超时时间的方法
2019/01/12 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
拓展策划方案
2014/06/03 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
建党伟业的观后感
2015/06/01 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
MySQL系列之二 多实例配置
2021/07/02 MySQL
python游戏开发Pygame框架
2022/04/22 Python