详解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在指定目录下查找gif文件的方法
May 04 Python
Python封装shell命令实例分析
May 05 Python
python通过post提交数据的方法
May 06 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Python API自动化框架总结
Nov 12 Python
python 求定积分和不定积分示例
Nov 20 Python
postman和python mock测试过程图解
Feb 22 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
python中HTMLParser模块知识点总结
Jan 25 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用mysql数据库存储session的代码
2010/03/05 PHP
PHP CURL 内存泄露问题解决方法
2015/02/12 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
input的focus方法使用
2010/03/13 Javascript
js charAt的使用示例
2014/02/18 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
银行职业规划书范文
2013/12/28 职场文书
妇产医师自荐信
2014/01/29 职场文书
会计岗位说明书
2014/07/29 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
建议书格式
2015/02/04 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android