欢迎加入QQ讨论群258996829
麦子学院 头像
苹果6袋
6
麦子学院

python3中如何实现web端json通信协议?

发布时间:2017-01-01 13:33  回复:0  查看:2850   最后回复:2017-01-01 13:33  
之前有用 python3开发 实现过tcp 协议的 , 后来又实现了 http 协议的通信,今天公司想做一个功能自动测试系统,下午弄了一会,发现 json 格式的实现可以更简单一点,代码如下:简单解说一下,一般与服务器通信分两块,一块是 get 协议,一块是 post 协议, get 协议很简单,直接就可访问了, post 协议,实际上把 data 数据用起来,程序直接会自动辨别类型。
  在写的过程中遇到3 个问题:
  在实现 post 协议时曾遇到错误,
  大致说数据格式的问题,解决方法很简单,转为utf-8 格式: bytes(data, ' utf8 ' ) 
  获取到的 json 数据遇到里面中文时遇到编码问题
  发现表现出0xaa0xbb0xcc0xdd 这样的编码,  json 加载时调用 utf8 即可,使用这一句代码:  json.loads(rawtext.decode( ' utf8 ' ))
  打印出 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)
来源: 博客园
您还未登录,请先登录

热门帖子

最新帖子