详解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 相关文章推荐
Pthon批量处理将pdb文件生成dssp文件
Jun 21 Python
python实现中文分词FMM算法实例
Jul 10 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
在cmd中运行.py文件: python的操作步骤
May 12 Python
解决Django加载静态资源失败的问题
Jul 28 Python
浅析使用Python搭建http服务器
Oct 27 Python
linux 下selenium chrome使用详解
Apr 02 Python
Pygame的程序开始示例代码
May 07 Python
python脚本框架webpy模板赋值实现
Nov 20 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防注入漏洞过滤函数代码
2012/04/11 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
全面了解JavaScript的作用域链
2019/04/03 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
自我鉴定四大框架
2014/01/17 职场文书
个人自我剖析材料
2014/02/07 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Python爬虫之爬取二手房信息
2021/04/27 Python