天天看点

python3调用http接口

最近在写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