最近在写python调用接口的服务,写了一个调用接口的函数,如下:
import http.client
import json
def call_api(inputdata, url):
"""
:param inputdata: 单个样本的输入参数,是json格式的数据
:return: 单个样本的探真查询变量结果数据
"""
# 调用接口
connection = http.client.HTTPConnection(url)
headers = {'Content-type': 'application/json'}
json_foo = json.dumps(inputdata)
connection.request('POST', '/XXXX/XXXX', json_foo, headers)
response = connection.getresponse()
res = json.loads(response.read().decode())
# 接口有正确的数据才读入,否则为空
if res['code'] == '0000':
res_data = json.loads(res['data'])
else:
res_data = {}
return res_data
url 是形如 ‘xxx.xxx.xxx.xx:xxxx’。
http模块简介 http.client 是一个底层的 HTTP 协议客户端,被更高层的 urllib.request 模块所使用。
http.client 模块 http.client 模块定义了实现 http 和 https 协议客户端的类。该模块通常不会直接使用,而是用封装好的 urllib.request 模块来使用他们处理 URL 。
HTTPConnection 类 初始化一个http链接。
HTTPConnection 实例表示与 HTTP 服务器的事务。
HTTPConnection 对象方法 request请求的方法和请求的链接地址。
使用指定的 method 方法和 url 链接向服务器发送请求。 如果指定 了body 部分,那么 body 部分将在 header 部分发送完之后发送过去。body 部分可以是一个字符串、字节对象、文件对象或者是字节对象的迭代器。不同的 body 类型对应不同的要求。header 参数应该是 HTTP 头部的映射,是一个字典类型。post 请求数据的headers参数要带上 Content-type 字段,以告知消息主体以何种方式编码。
HTTPConnection.getresponse() 得到返回的http response。必须在请求发送后才能调用得到服务器返回的内容,返回的是一个 HTTPResponse 实例。
urllib.request调用接口的方式
import urllib.request
import json
#以post方式提交命令
postdata = urllib.parse.urlencode(params).encode('utf-8')
json.loads(urllib.request.urlopen(api_url, postdata, timeout=HTTP_TIME_OUT).read().decode('utf-8'))
建议参考:
Python3 内置http.client,urllib.request及三方库requests发送请求对比: https://www.jianshu.com/p/491d6590b2a0