欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解python3實現(xiàn)的web端json通信協(xié)議

 更新時間:2016年12月29日 09:58:55   作者:綠色的麥田  
本篇文章主要介紹了python3實現(xiàn)的web端json通信協(xié)議,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

之前有用python3實現(xiàn)過tcp協(xié)議的,后來又實現(xiàn)了http協(xié)議的通信,今天公司想做一個功能自動測試系統(tǒng),

下午弄了一會,發(fā)現(xiàn)json格式的實現(xiàn)可以更簡單一點,代碼如下:簡單解說一下,一般與服務器通信分兩塊,一塊是get協(xié)議,一塊是post協(xié)議,

get協(xié)議很簡單,直接就可訪問了,post協(xié)議,實際上把data數(shù)據(jù)用起來,程序直接會自動辨別類型。

在寫的過程中遇到3個問題:

1 在實現(xiàn)post協(xié)議時曾遇到錯誤,

大致說數(shù)據(jù)格式的問題,解決方法很簡單,轉(zhuǎn)為utf-8格式:bytes(data, 'utf8') ,

2 獲取到的json數(shù)據(jù)遇到里面中文時遇到編碼問題

發(fā)現(xiàn)表現(xiàn)出0xaa0xbb0xcc0xdd這樣的編碼,json加載時調(diào)用utf8即可,使用這一句代碼:json.loads(rawtext.decode('utf8'))

3 打印出json時表現(xiàn)出一行很長很長的字符串

長長的字符串看了非常痛苦,根本看不清json里面各對像的關系,網(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)

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論