详解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中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
Python实现统计文本文件字数的方法
May 05 Python
遗传算法python版
Mar 19 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
Oct 11 Python
python实现Dijkstra算法的最短路径问题
Jun 21 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
利用python计算时间差(返回天数)
Sep 07 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
Python同时迭代多个序列的方法
Jul 28 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 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
239军机修复记
2021/03/02 无线电
用PHP 4.2书写安全的脚本
2006/10/09 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
JS实现页面打印功能
2017/03/16 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中防止sql注入的方法详解
2017/02/25 Python
python实现指定字符串补全空格、前面填充0的方法
2018/11/16 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
C++是不是类型安全的
2014/02/18 面试题
中英文自我评价语句
2013/12/20 职场文书
新三好学生主要事迹
2014/01/23 职场文书
家长会欢迎词
2015/01/23 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
毕业设计致谢语
2015/05/14 职场文书
如何写观后感
2015/06/19 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电
Redis主从复制操作和配置详情
2022/09/23 Redis