Python3 Web端JSON通信实现:解决编码与格式化难题
本文介绍使用Python3实现Web端JSON通信的方法,涵盖GET与POST协议。重点解决POST数据编码、中文乱码及JSON输出格式化问题,提供utf-8转换与json.dumps配置代码,助力自动化测试系统开发。
此前曾使用Python3实现过TCP协议通信,随后又完成了HTTP协议的通信功能。如今公司计划开发一套自动测试系统,
经过一下午的尝试,发现基于JSON格式的实现方式可以更加简洁,具体代码如下:简要说明一下,通常与服务器进行通信主要涉及两个部分,一部分是GET协议,另一部分是POST协议,
GET协议的操作非常直接,可以直接访问;而POST协议则需要利用data数据,程序会自动识别数据类型。
在编写代码的过程中遇到了三个主要问题:
1. 在实现POST协议时曾出现错误,
这主要涉及数据格式的问题,解决方法很简单,即将数据转换为utf-8格式:bytes(data, 'utf8') ,
2. 在获取JSON数据时,若其中包含中文,会遇到编码问题
此时数据可能表现为0xaa0xbb0xcc0xdd这样的编码形式,在加载JSON时调用utf-8即可解决,使用以下代码: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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













