详解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字典DICT类型合并详解
Aug 17 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
浅析python的优势和不足之处
Nov 20 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
如何利用python给图片添加半透明水印
Sep 06 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
15行Python代码实现免费发送手机短信推送消息功能
Feb 27 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python self用法详解
Nov 28 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 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
php设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
php数组查找函数总结
2014/11/18 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
Python+django实现文件上传
2016/01/17 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
HEMA英国:荷兰原创设计
2018/08/28 全球购物
Ruby如何定义一个类
2012/10/08 面试题
办公室文员自荐书
2014/02/03 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
安全先进个人材料
2014/12/29 职场文书
写给医院的感谢信
2015/01/22 职场文书
毕业生个人总结
2015/02/28 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server