python3实现的web端json通信协议
之前有⽤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⾥⾯各对像的关系,⽹上说⽤什么l⽅法解决,不过那是针对命令⾏的,我这是在调试过程中还是希望直接打印出来,
采⽤如下代码: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("baidu/")
# params = "abcd/select/100000?userID=1234&groupID=79"
# web.url_get(params)
#
# post调⽤
# web = web_json("baidu/")
# params = "abcd/select/100000"
# data = '{"name": "jack", "id": "1"}'
# web.url_post(params, data)
quest 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 = ad()
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):
_url_data(params, None)
# post⽅法
def url_post(self, params, data):
data=bytes(data, 'utf8')
python新手代码_url_data(params, data)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论