欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python实现接口请求

程序员文章站 2022-06-29 17:04:53
python+request我们想用 python实现get请求,requests是Python发送接口请求非常好用的一个三方库。但是requests发送请求是串行的,需要发送完一条请求后才能发送另一条请求。安装方法: pip install requests下面的示例是我用 requests.get()方法实现串行请求1000条数据,参数a,b,c。b和c固定,我把100条参数a放在了excle中,通过pandas读excle。Requests 允许使用 params 关键字参数,以一个字符串字...

python+request串行

我们想用 python实现接口请求,requests是非常好用的一个三方库。但是requests发送请求是串行的,需要发送完一条请求后才能发送另一条请求。
安装方法: pip install requests
下面的示例用 requests.get()方法实现串行请求100条数据,参数a,b,c。b和c固定,把100条参数a放在excle中,通过pandas读excle。
Requests 允许使用 params 关键字参数,以一个字符串字典来提供这些参数。

> import pandas as pd 
> import requests 
> 
> #你的接口请求地址
> g_request_url = "你的请求地址"
> 
> #串行请求 
> def do_request(request_url,send_data):
>     response = requests.get(request_url,params=send_data)
>     return response 
>     
> if __name__ == '__main__':
>     data = pd.read_excel('D:/a_test.xlsx', sheet_name='Sheet1', header=0)
>     # pandas读excle是Dataform,我们将Dataform转list
>     excel_list = data.values.tolist()
>     error = 0
>     total = 0
>     for data1 in excel_list:
>         a = data1[0]
>         payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
>         #发送请求
>         result=do_request(g_request_url,payload)
>         code = result.status_code
>         if(code != 200):           
>             error = error + 1
>         total = total + 1
>     print("total"+str(total))
>     print("error"+str(error))

运行后,我们发现100条请求串行请求时间太长,为了提升测试效率,一般我们需要并行发送请求。这里可以使用多线程,或者协程,gevent或者aiohttp,然而使用起来,都相对麻烦。
那有什么实现起来简单的方法吗?当然有!

python+grequests并行

grequests是基于gevent+requests编写的一个并发发送请求的库,我们直接使用起来非常简单。
安装方法: pip install grequests
grequests支持get、post、put、delete等requests支持的HTTP请求方法,使用参数和requests一致,发送请求非常简单。
通过遍历res_list可以得到所有请求的返回结果。

import grequests as grequests
import pandas as pd

g_request_url = "你的请求地址"

#并行请求 
def do_grequest(request_url,send_data):
    response = grequests.get(request_url,params=send_data)
    #print(response.text,a)
    return response 
if __name__ == '__main__':
    data = pd.read_excel('D:/a_test.xlsx', sheet_name='Sheet1', header=0)
    # pandas读excle是Dataform,我们将Dataform转list
    excel_list = data.values.tolist()
    # print(excel_list)
    #构造请求列表
    url_list = []
    for data1 in excel_list:
        a = data1[0]
        payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
        result=do_grequest(g_request_url,payload)
        url_list.append(result)
        #print(url_list)
    # 并行发送,等最后一个运行完后返回
    res_list = grequests.map(url_list)
    #print(res_list)
    for i in res_list:
        code = i.status_code
        if (code != 200):
           error = error + 1
        else:
            total = total + 1
    print("total" + str(total))
    print("error" + str(error))

requests和grequests性能对比

以上串行和并行请求代码执行后,明细发现串行花费的时间要比并行请求长,我们可以对比下requests串行和grequests并行请求的时间。
requests请求:

import pandas as pd
import requests
import time

#你的接口请求地址
g_request_url = "你的请求地址"
#串行请求 
def do_request(request_url,send_data):
    response = requests.get(request_url,params=send_data)
    return response

if __name__ == '__main__':
    data = pd.read_excel('D:/a_test.xlsx', sheet_name = 'Sheet3', header = 0)
    # Dataform转list
    excel_list = data.values.tolist()
    start = time.time()
    for data1 in excel_list:
        a = data1[0]
        payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
        result = do_request(g_request_url,payload)
    print(time.time() - start) 

串行请求1000条数据,耗时:245.24240112304688s
python实现接口请求
grequests请求:

import grequests as grequests
import pandas as pd
import time

g_request_url = "你的请求地址"

#并行请求
def do_grequest(request_url,send_data):
    response = grequests.get(request_url,params=send_data)
    return response
if __name__ == '__main__':
    data = pd.read_excel('D:/ios_1000.xlsx', sheet_name='Sheet3', header=0)
    # Dataform转list
    excel_list = data.values.tolist()
    #构造请求列表
    url_list = []
    start = time.time()
    for data1 in excel_list:
        a = data1[0]
        payload = {'a': a, 'b': {"ip": "xx.xx.xx.xx", "ts": 1588841180}, 'c': 2}
        result=do_grequest(g_request_url,payload)
        url_list.append(result)
    res_list = grequests.map(url_list)
    print(time.time() - start)

并行请求1000条数据,耗时:14.888465404510498s
python实现接口请求

本文地址:https://blog.csdn.net/qipa12345/article/details/107067685