ホームページ >バックエンド開発 >Python チュートリアル >python3で実装されるWeb側json通信プロトコルの詳細説明

python3で実装されるWeb側json通信プロトコルの詳細説明

高洛峰
高洛峰オリジナル
2017-02-11 13:21:211840ブラウズ

この記事では主に Python3 で実装された Web 側の JSON 通信プロトコルを紹介します。興味のある方は参考にしてください。

以前は python3 を使用して tcp プロトコルを実装していましたが、その後 http プロトコル通信を実装しました。今日、会社は機能的な自動テスト システムを作成したいと考えています。 json 形式のコードは次のとおりです。 簡単に説明すると、サーバーとの通信は通常 2 つの部分に分かれており、1 つは get プロトコルで、もう 1 つは post プロトコルです。 post プロトコルは実際にデータ データを使用し、プログラムはそのデータに直接アクセスし、タイプを自動的に識別します。

書き込みプロセス中に 3 つの問題が発生しました:

1 post プロトコルの実装時にエラーが発生しました

大まかに言えば、問題は utf-8 形式に変換することです。 (data , 'utf8'),

2 取得した json データに中国語が含まれていると、エンコーディングの問題が発生しました。json をロードするときに utf8 を呼び出すだけです。 loads( rawtext.decode('utf8'))

3 json を出力すると、非常に長い文字列が表示されます

長い文字列は読むのが非常に苦痛で、json 内のオブジェクト間の関係を明確に見ることはできません。インターネットでは、問題を解決するにはどのような json.tool メソッドを使用する必要があると言われていますが、それはコマンドライン用であり、デバッグプロセス中に直接出力したいと考えています

次のコードを使用します。 json.dumps(jsonStr, sort_keys=False, ensure_ascii = False, indent=2))、ここでは、ensure_ascii が False である必要があることに注意する必要があります。そうでない場合、中国語が含まれている場合、0xx か何かが表示されます。indent=2 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)


以上が、皆さんの学習に役立つことを願っています。誰もが PHP 中国語 Web サイトをサポートするでしょう。

python3 で実装された Web 側の JSON 通信プロトコルに関する詳細な記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。