今天早上想快速实现几个临时使用的http接口,供其他人调用,之前都是使用java去写的,最近因为都玩着python,第一时间想到使用flask去实现试试,也体验下flask轻量级的框架。
在https://flask-restful.readthedocs.io/en/latest/上快速过了一次示例文档,也在度娘上看了下其他人的例子,但很多都是只写了服务端或者只写了客户端,两端同时实现的示例很少。
服务端实现
下述实现分别支持post和get的服务端,在实现过程中发现传参存在多种形式,例如参数在header还是在body中,数据格式是text还是json,这是需要注意的,因为影响到调用时参数位置及参数格式的设置。
#!/usr/bin/env python
import sys
from flask import Flask, jsonify
from flask import abort
from flask import request
import logging
import time
logging.basicConfig(format='[%(levelname)s %(asctime)s %(filename)s %(lineno)s]:%(message)s', filename='http_server.log',level=logging.INFO)
app = Flask(__name__)
@app.route('/phone/risk', methods=['POST', 'GET'])
def phone_restful():
phone = ''
appid = ''
if request.method == "POST":
phone = request.form.get('phone')
appid = request.form.get('appid')
if request.method == "GET":
phone = request.args.get('phone')
appid = request.args.get('appid')
print('phone=%s, appid=%s' % (phone, appid))
#在这实现功能逻辑
return jsonify({'retcode': ret, 'message':'成功', 'data':data})
def task():
#拉起http服务进程
app.run(host="0.0.0.0", port=1688, threaded=True)
if __name__ == '__main__':
task()
测试
使用postman测试post
使用postman测试get
客户端实现
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os
import sys
import json
import time
import requests
#post的方式
def post_fun(phone, appid):
url = 'http://xxx.xxx.xxx.xxx:1688/phone/risk'
headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)','Content-Type': 'application/x-www-form-urlencoded'}
values = {'phone':phone,'appid':appid}
response = requests.post(url, data =values, headers = headers)
if response.status_code == 200:
print('成功')
else:
print('失败')
#get的方式
def get_fun(phone, appid):
url = 'http://xxx.xxx.xxx.xxx:1688/phone/risk?phone=%s&appid=%s' % (phone, appid)
response = requests.get(url)
if response.status_code == 200:
print('成功')
else:
print('失败')
if __name__ == '__main__':
phone = '13333333220'
appid = 'goodboy16888'
post_fun(phone, appid)
get_fun(phone, appid)
一个极简单的示例,希望对新手有所帮助。