>  기사  >  백엔드 개발  >  python3으로 구현된 웹사이드 json 통신 프로토콜에 대한 자세한 설명

python3으로 구현된 웹사이드 json 통신 프로토콜에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-02-11 13:21:211814검색

이 글은 주로 python3으로 구현된 웹사이드 json 통신 프로토콜을 소개합니다. 관심 있는 친구들은 참고할 수 있습니다.

이전에는 python3을 사용하여 tcp 프로토콜을 구현했고, 나중에는 http 프로토콜 통신을 구현해 보았습니다.

한동안 작업한 끝에 회사에서는 기능적인 자동 테스트 시스템을 만들고 싶습니다. 오후에 json 형식이 구현이 더 간단하다는 것을 알았습니다. 코드는 다음과 같습니다. 간단히 설명하면 서버와의 통신은 일반적으로 두 부분으로 나뉘는데, 하나는 get 프로토콜이고 다른 하나는 post 프로토콜입니다.

get 프로토콜은 매우 간단하며 직접 액세스할 수 있습니다. post 프로토콜은 실제로 데이터가 사용될 때 프로그램이 자동으로 유형을 식별합니다.

작성 과정에서 3가지 문제가 발생했습니다.

1 포스트 프로토콜을 구현할 때 오류가 발생했습니다.

일반적으로 데이터 형식의 문제는 매우 쉽습니다. 간단하게 utf-8 형식으로 변환: bytes(data, 'utf8') ,

2

내부에서 중국어를 만날 때 얻은 json 데이터에 인코딩 문제가 발생하여 0xaa0xbb0xcc0xdd가 표시되는 것을 발견했습니다. 이렇게 인코딩하려면 json을 로드할 때 utf8을 호출하세요. 다음 코드를 사용하세요: json.loads(rawtext.decode('utf8'))

3 json을 인쇄하면 매우 긴 문자열이 나타납니다. >

긴 문자열을 읽는 것은 매우 고통스럽고 json의 개체 간의 관계를 명확하게 볼 수 없습니다. 문제를 해결하기 위한 json.tool 메서드가 인터넷에 있지만 이는 명령줄에 대한 것입니다. 디버깅 프로세스 중에도 직접 인쇄하고 싶은 경우

에서는 print(json.dumps(jsonStr, sort_keys=False, verify_ascii= False, indent=2)) 코드를 사용합니다. 여기서는 verify_ascii가 False여야 한다는 점에 유의해야 합니다. 그렇지 않으면

에 중국어가 있는 경우 표시되는 내용은 0xx 정도입니다. indent=2는 형식화된 json 표시를 의미하고, sort_keys는 이 json이 필요하지 않음을 의미합니다. sorted



#!/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 중국어 웹사이트를 지지해주기를 바랍니다.

python3으로 구현한 웹사이드 json 통신 프로토콜에 대한 더 자세한 글은 PHP 중국어 홈페이지를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.