iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python获取接口请求耗时的方法详解
  • 564
分享到

Python获取接口请求耗时的方法详解

Python获取接口请求耗时Python接口请求耗时Python接口请求 2023-05-16 12:05:38 564人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录项目展示如何获得握手时间如何获得请求时间善用装饰器总结你想知道我们请求一个url的时候,握手和请求资源分别占用多长时间么?今天我们使用python写个小案例来看看吧。 impor

你想知道我们请求一个url的时候,握手和请求资源分别占用多长时间么?今天我们使用python写个小案例来看看吧。

import Socket
import time

def funcRunTimes(func):
    def wrapper(*args):
        startTime = time.time()
        result = func(*args)
        endTime = time.time()
        execTime = endTime - startTime
        return (result,execTime)
    return wrapper

@funcRunTimes
def shakeHands(hosts,port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((hosts, port))
        return s
    except Exception as e:
        print(e)
        return None

@funcRunTimes
def WEBsiteResponseTime(fd,methods,url):
    sendMsgs = "%s %s Http/1.1\r\nHost: 127.0.0.1:8080\r\n\r\n" %(methods,url)
    fd.send(sendMsgs.encode())
    recv_data = ""
    while True:
        recv_data = str(fd.recv(15))
        break

    httpCode = recv_data.split(" ")[1]
    return httpCode

def main():
    hosts = "www.juejin.cn"
    port = 80

    methods = "GET"
    url = "/"

    print("执行命令为: %s %s:%d %s\n" % (methods, hosts, port, url))

    shakeInfo = shakeHands(hosts,port)
    if shakeInfo == None:
      print("errors")
      return
    responseInfo = websiteResponseTime(shakeInfo[0],methods,url)
    print("接口状态码为:" , responseInfo[0],"握手耗时: %.6fs" %(shakeInfo[1]) , "请求接口耗时: %.6fs" %(responseInfo[1]) ,"总共耗时为: %.6fs" % (shakeInfo[1] + responseInfo[1]))

if __name__ == '__main__':
    main()

项目中使用了Python装饰器,若还对python装饰器不太了解的小伙伴,可以参考一下下面这篇文章:python | 探寻python装饰器

项目展示

打开项目,修改hostsportmethods以及url的变量,即可运行python程序便可获得该页面的详细信息的时间,其中包括tcp/IP三次握手时间 以及 请求接口耗时,最后是 总的耗时,

如何获得握手时间

在获取握手时间的时候,不能使用http库,例如: requests,因为它默认会进行tcp/ip三次握手,而后再进行资源请求,所以我们要使用socket来做这个需求。

python中,socket提供了一种跨平台的网络通信接口,可以用它来创建各种类型的网络连接。

例如代码如下:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))

在上面的代码中,我们先导入socket库,而后使用socket.socket()创建一个socket句柄,而中间的参数分别代表的意思为:

  • socket.AF_INET: 指定IPv4协议。
  • socket.SOCK_STREAM: 指定使用TCP流式套接字类型。

s.connect则开始连接服务器,其参数类型为元组类型,参数值为远程主机名 和 远程端口。

如上代码,当远程服务器连不上的时候或者其他异常的时候,该代码会抛异常,若没有异常,则证明端口通的。

我们仅需要在此之前和之后,都拉一下当前时间戳,就可以计算出握手所耗费的时间,例如:

import socket
import time
try:
    startTime = time.time()
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 8080))
    endTime = time.time()
    print("runtimes: " , endTime-startTime)
except Exception as e:
    print("捕获异常" , e)

若没有抛错,我们即可获得握手时间。

如何获得请求时间

握手成功后,我们就可以向该服务器发送http报文了,注意最简单报文的格式是:

请求方法 请求路由 版本号
请求头(主机名)
空行

例如:

GET / HTTP/1.1
Host: 127.0.0.1:8080

如果我们不添加Host请求头,则会抛错: HTTP/1.1 400 Bad Request: missing required Host header

python中,我们直接使用s.send()函数即可发送请求,例如:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))
s.send(b"GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\n\r\n")

上述代码中,\r\n是换行的意思,也称之为CRLF,注意最后的2个\r\n是有一个空行,来标志http请求头的结束。

一般来说,我们请求接口后,会读取服务器返回来的状态码,以便开发验证是否是成功的。

这里可以使用s.recv()函数来读取服务器传回来的信息,例如读取从服务器返回的15个字节s.recv(15)

我们可以参考计算握手时间的方法,来计算一下资源请求的时间,代码如下:

import socket
import time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 8080))

startTime = time.time()
s.send(b"GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\n\r\n")
recv_data = str(s.recv(15))
endTime = time.time()
print("runtimes: ", endTime - startTime,"接口返回状态码: " , recv_data.split(" ")[1])

如果远程主机和远程端口都正常的话,我们大概会得到如下的信息:

善用装饰器

我们计算握手时间,和计算资源请求时间,都是相同的代码,因为计算的功能不同,所以我们需要被迫写2次,这个时候,就可以使用装饰器,来把这个额外非核心功能给抽离出来,而将计算握手和计算资源请求都给封装为函数,而后通过函数来调用装饰器,就可以获取2种请求时间了。

我们先将装饰器抽离出来:

def funcRunTimes(func):
    def wrapper(*args):
        startTime = time.time()
        result = func(*args)
        endTime = time.time()
        execTime = endTime - startTime
        return (result,execTime)
    return wrapper

我们在funcRunTimes中直接返回wrapper函数,而在wrapper函数中,定义开始时间和结束时间,在二者的中间执行函数func,最后将func的结果以及函数执行的时间封装为一个元组进行返回。

此时,我们可以封装函数了,例如我们想获取握手的时间,我们可以这样写:

@funcRunTimes
def shakeHands(hosts,port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    try:
        s.connect((hosts, port))
        return s
    except Exception as e:
        print(e)
        return None

如果该远程主机可以连上,我们直接返回socket句柄,若连接不上,直接打印错误,返回None

调用该函数的是,我们接收返回值即可:

shakeInfo = shakeHands(hosts,port)

注意,shakeInfo是一个元组,有2个元组,第一个是socket句柄,第二个是执行该函数所需要的时间。

我们再将资源请求函数封装一下,就可以完成这个项目了。

总结

我们使用python socket连接服务器,以及发送http报文,再计算2个函数所执行的时间,便可以获取到握手和资源请求的时间了,最后再将获取时间的函数提取出来,封装为装饰器,供函数调用,即可得到函数的执行时间了。

到此这篇关于Python获取接口请求耗时的方法详解的文章就介绍到这了,更多相关Python接口请求耗时内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python获取接口请求耗时的方法详解

本文链接: https://www.lsjlt.com/news/209702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python获取接口请求耗时的方法详解
    目录项目展示如何获得握手时间如何获得请求时间善用装饰器总结你想知道我们请求一个url的时候,握手和请求资源分别占用多长时间么?今天我们使用python写个小案例来看看吧。 impor...
    99+
    2023-05-16
    Python获取接口请求耗时 Python接口请求耗时 Python接口请求
  • SpringMVC实现获取请求参数方法详解
    目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@RequestHeader5、@CookieValue6、通过POJO获取...
    99+
    2024-04-02
  • java获取请求ip的方法
      在上篇文章中我们介绍了 java获取请求 ip的方法,那么这篇文章我们就来详细讲解下获取请求 ip的方法。获取请求 ip的方法是基于 HTTP协议的,其原理如下: 1、用 web应用程序,将 web服务器端与客户端通过 HTTP协议通...
    99+
    2023-09-06
    java tcp/ip servlet
  • Python Flask 请求数据获取响应详解
    目录一,请求数据及其获取        1.1请求相关数据1.2固定参数与转换器1.3查询参数获取1....
    99+
    2024-04-02
  • java获取真实的请求接口ip地址
    在Java程序中获取请求的真实IP地址可以使用以下方法: 使用javax.servlet.http.HttpServletRequest类中的getRemoteAddr()方法,这个方法可以获取请求的IP地址。 可以检查X-Forwar...
    99+
    2023-09-04
    java tcp/ip servlet 前端 服务器
  • 探讨php获取请求的方法
    PHP是一种功能强大的服务器端编程语言,广泛应用于Web开发领域。当我们在PHP代码中接收请求时,我们通常需要知道当前的请求方法是什么,以便我们能够对其进行适当的处理。本篇文章将针对PHP如何获取请求方法进行探讨。一、GET和POST请求方...
    99+
    2023-05-14
    php 请求处理
  • Vue + Axios 请求接口方法与传参方式详解
    目录一、Get请求:二、Post请求:三、拓展补充使用Vue的脚手架搭建的前端项目,通常都使用Axios封装的接口请求,项目中引入的方式不做多介绍,本文主要介绍接口调用与不同形式的传...
    99+
    2024-04-02
  • JavaScript实现请求服务端接口方法详解
    JavaScript 中请求服务端接口的代码实现可能会因为使用的方法而有所不同。 1、使用 XMLHttpRequest: var xhr = new XMLHttpRequest(...
    99+
    2023-01-31
    JS请求服务端接口 JavaScript请求服务端接口
  • php获取请求的方法有哪些
    这篇“php获取请求的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php获取请求的方法有哪些”文章吧。一、GET...
    99+
    2023-07-05
  • 简单获取新浪短网址API接口的方法(附PHP请求示例)
    背景新浪短网址api是sina平台官对外公开的短网址生成接口,可以将长链接通过接口生成t.cn样式的短链接,可以说是非常好用的。但近期新浪官方开始对已经公布的接口做出了多重限制,很多之前能用的功能现在都频频被限制,甚至有的时候接口一更新就失...
    99+
    2023-06-02
  • springboot怎么获取访问接口的请求的IP地址
    这篇文章主要讲解了“springboot怎么获取访问接口的请求的IP地址”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot怎么获取访问接口的请求的IP地址”吧!工具类:imp...
    99+
    2023-06-20
  • java中springMVC获取请求参数的方法
    目录原生方式获取请求参数控制器方法形参获取请求参数@RequestParam注解@RequestHeader注解@CookieValue注解通过POJO获取请求参数原生方式获取请求参...
    99+
    2023-05-18
    springMVC 请求参数 springMVC 请求
  • JAVA获取HTTP请求头的方法示例
    本文实例讲述了JAVA获取HTTP请求头的方法。分享给大家供大家参考,具体如下:在利用Java网络编程时,利用Java获取HTTP Request 和 Response头字段;可以利用Java语言根据需要添加自定义的HTTP头字段,而不必拘...
    99+
    2023-05-31
    java http请求头 ava
  • flutter中的网络请求数据获取详解
    目录跨平台的http请求请求数据添加http包发起请求将响应转为常用对象获取数据展示数据为什么要在initstate中获取数据?跨平台的http请求 http包提供了最简单的发起请...
    99+
    2023-01-11
    flutter网络请求数据获取 flutter 数据获取
  • springboot 获取访问接口的请求的IP地址的实现
    工具类: import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import ja...
    99+
    2024-04-02
  • Golang时间戳获取方法详解
    Golang时间戳获取方法详解 在Golang中,时间戳是一种非常重要的时间表示方式。时间戳通常是一个整数,表示从某个固定的时间点开始,到当前时间的秒数或毫秒数。在许多应用场景中,我们常常需要获取当前时间的时...
    99+
    2024-01-16
    Golang 时间戳 获取方法
  • Python获取网络时间戳的两种方法详解
    目录方法一代码实现调用方法返回结果方法二代码实现调用方法返回结果在我们进行注册码的有效期验证时,通常使用获取网络时间的方式来进行比对。 以下为获取网络时间的几种方式。 方法一 需要的...
    99+
    2024-04-02
  • jmeter获取请求内容的方法是什么
    在JMeter中,可以使用以下方法来获取请求内容:1. 使用HTTP信息头管理器(HTTP Header Manager):在测试计...
    99+
    2023-09-15
    jmeter
  • javascript获取请求参数的方法是什么
    这篇文章主要讲解了“javascript获取请求参数的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript获取请求参数的方法是什么”...
    99+
    2024-04-02
  • Axios取消重复请求的方法实例详解
    目录前言一、如何取消请求二、如何判断重复请求三、如何取消重复请求3.1 定义辅助函数3.2 设置请求拦截器3.3 设置响应拦截器四、CancelToken 的工作原理五、总结六、参考...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作