调用http+pb接口/json请求http/封装服务全流程总结

1.调用http+pb接口

下载protobful。

具体使用步骤:
1.首先将 pro文件 通过protoc 编译成 py文件。

protoc ./xxx.proto --python_out=./

2.创建test.py文件 调用生成的pb2.py文件的 传入参数类,返回参数类。
3.在服务器上python test.py文件

具体执行python代码:

#-*-coding:utf-8-*-
syntax = "proto2";
#调用生成的pb.py文件
import pb
import requests

URL = "http://ip:port/class"
#创建请求参数类实例
req = pb.Request()
req.business_id =bytes(101)
req.vid = bytes(''.encode('utf-8'))
req.title = bytes('')
#请求参数转化为字符串
reqString= req.SerializeToString()
#发送请求
res = requests.post(URL, data=reqString)
#创建返回参数实例类
target = pb.Response()
#解析返回参数
target.ParseFromString(res.content)
# 赋值各类字段属性给相应变量
id=target.id
print(vid)

2.json请求http服务
cmd命令:

curl -H "Content-Type: application/json" -X POST -d  '{ }'  http://ip:port/class

python代码:

①适用于接受json格式
#请求体
req={
    }
URL = "http://%s:%d/class"%(host,port)
#调用接口
res = requests.post(URL, json=req)
result = json.loads(res.text)

②接收json编码后的格式
url='http://ip:port/class'
values ={ }       #json体
dd = json.dumps(values)             # 对数据进行JSON格式化编码
req = urllib2.Request(url, dd)       # 生成页面请求的完整数据
response = urllib2.urlopen(req)       # 发送页面请求
print response.read()                    # 获取服务器返回的页面信息

3.封装服务

from flask import Flask, request

app = Flask(__name__)

@app.route('/application', methods=['POST', 'GET'])
def main():
    pass
if __name__ == '__main__':
    app.run('0.0.0.0', 80)

附加:
unicode编码转中文:

var=" "
var.encode().decode('utf8')

对于提取出来的数据形式为"\\uXXXX"的、
t1  = eval(repr(t).replace("\\\\", "\\"))

图片转为字节流形式:

from io import BytesIO
with open("xxx.jpg") as f:
    byte_image=BytesIO(f.read()).getvalue()

图片转base64格式:

import base64
with open(file_path, "rb") as f:
     base64_data = base64.b64encode(f.read())

解析图片URL地址:

from urllib import parse
parse.unquote("")

读取配置文件:

import configparser
cf = configparser.ConfigParser()
cf.read(file_path)
获取具体值:
cf.get("key1", "key2 ")

配置文件ini.config示例:
[key1]
key2=1000

添加日志信息

import logging
import traceback

# 创建日志级别
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

# 创建日志文件
handler_info = logging.FileHandler('info_log.txt')
handler_info.setLevel(logging.INFO)

# 定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_info.setFormatter(formatter)
logger.addHandler(handler_info)

#添加日志信息:
logger.info(traceback.format_exc())

你可能感兴趣的:(封装服务)