99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

python3中如何實現(xiàn)web端json通信協(xié)議?

發(fā)布時間:2017-01-01 13:33  回復(fù):0  查看:2822   最后回復(fù):2017-01-01 13:33  
之前有用 python3開發(fā) 實現(xiàn)過tcp 協(xié)議的 , 后來又實現(xiàn)了 http 協(xié)議的通信,今天公司想做一個功能自動測試系統(tǒng),下午弄了一會,發(fā)現(xiàn) json 格式的實現(xiàn)可以更簡單一點,代碼如下:簡單解說一下,一般與服務(wù)器通信分兩塊,一塊是 get 協(xié)議,一塊是 post 協(xié)議, get 協(xié)議很簡單,直接就可訪問了, post 協(xié)議,實際上把 data 數(shù)據(jù)用起來,程序直接會自動辨別類型。
  在寫的過程中遇到3 個問題:
  在實現(xiàn) post 協(xié)議時曾遇到錯誤,
  大致說數(shù)據(jù)格式的問題,解決方法很簡單,轉(zhuǎn)為utf-8 格式: bytes(data, ' utf8 ' ) 
  獲取到的 json 數(shù)據(jù)遇到里面中文時遇到編碼問題
  發(fā)現(xiàn)表現(xiàn)出0xaa0xbb0xcc0xdd 這樣的編碼,  json 加載時調(diào)用 utf8 即可,使用這一句代碼:  json.loads(rawtext.decode( ' utf8 ' ))
  打印出 json 時表現(xiàn)出一行很長很長的字符串
  長長的字符串看了非常痛苦,根本看不清json 里面各對像的關(guān)系,網(wǎng)上說用什么 json.tool 方法解決,不過那是針對命令行的,我這是在調(diào)試過程中還是希望直接打印出來,
  采用如下代碼: 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 協(xié)議的通信庫,通信協(xié)議為 json, 傳出的 data json 格式,接收的數(shù)據(jù)也是 json 格式 外界調(diào)用時可先初始化 web_json 類,如下所示: # get 調(diào)用 # web = web_json("http://baidu.com/")# params = "abcd/select/100000?userID=1234&groupID=79"# web.url_get(params)# # post 調(diào)用 # 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)
來源: 博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?