新用户注册入口 老用户登录入口

[转载]利用python并发模块进行网站的状态检测

文章作者:转载 更新时间:2023-10-19 20:57:06 阅读数量:73
文章标签:HTTP请求线程并发测试请求头GET请求POST请求
本文摘要:这篇文章介绍了如何在Python中使用`httplib`库实现HTTP GET和POST请求,包括设置请求头信息、发送参数等操作。其中,重点展示了模拟浏览器发送请求的方式,并通过自定义`RequestThread`线程类进行并发性能测试,利用`threading`模块创建多个并发线程访问服务器,统计请求数量、成功率、响应时间和异常情况。测试过程中关注了如`User-Agent`在内的各种请求头信息以及GET与POST方法的运用,同时对响应时间进行了细致分析,以评估服务器在高并发场景下的性能表现。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_33835103/article/details/85213806。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

python  curl.py



  
  1. #!/usr/bin/python    

  2. # -*- coding: utf-8 -*-

  3. import httplib

  4. #连接服务器

  5. conn=httplib.HTTPConnection('www.dnspod.cn')

  6. #发送HTTP请求

  7. conn.request('GET','url')

  8. #得到结果

  9. result=conn.getresponse()

  10. #获取HTTP请求结果值。200为成功

  11. resultresultStatus=result.status

  12. print resultStatus

  13. #获取请求的页面内容  

  14. content=result.read()

  15. #关闭连接

  16. conn.close()

  17. #如果要模拟客户端进行请求,可以发送HTTP请求头

  18. headers={"Content-Type":"text/html;charset=gb2312"}

  19. conn.requeset('POST','url',headersheaders=headers)

  20. #带参数传送  

  21. params=urllib.urlencode({'key':'value'});

  22. conn.request('POST','url',body=params)

还有一个 模拟 浏览器的方式~



  
  1. #!/usr/bin/python

  2. # -*- coding: utf-8 -*-

  3. import httplib

  4. conn = httplib.HTTPConnection('www.hao123.com')

  5. conn.request('GET', '/', headers = {

  6.                                        "User-Agent" : "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",

  7.                                        "Accept" : "*/*",

  8.                                        "Accept-Encoding" : "gzip,deflate",

  9. })

  10. res = conn.getresponse()

  11. #print conn.getresponse().status

  12. print res.status

  13. print res.msg

  14. #print res.read()

  15. conn.close()



174318208.png

下面是 并发的测试~    类似 ab 和 webbench~~~~



  
  1. # -*- coding: utf8 -*-

  2. import threading, time, httplib

  3. HOST = "www.baidu.com"; #主机地址 例如192.168.1.101

  4. PORT = 80 #端口

  5. URI = "/?123" #相对地址,加参数防止缓存,否则可能会返回304

  6. TOTAL = 0 #总数

  7. SUCC = 0 #响应成功数

  8. FAIL = 0 #响应失败数

  9. EXCEPT = 0 #响应异常数

  10. MAXTIME=0 #最大响应时间

  11. MINTIME=100 #最小响应时间,初始值为100秒

  12. GT3=0 #统计3秒内响应的

  13. LT3=0 #统计大于3秒响应的

  14. # 创建一个 threading.Thread 的派生类

  15. class RequestThread(threading.Thread):

  16.    # 构造函数

  17.    def __init__(self, thread_name):

  18.        threading.Thread.__init__(self)

  19. self.test_count = 0

  20.    # 线程运行的入口函数

  21.    def run(self):

  22.        self.test_performace()

  23.    def test_performace(self):

  24.            global TOTAL

  25.            global SUCC

  26.            global FAIL

  27.            global EXCEPT

  28.            global GT3

  29.            global LT3

  30.            try:

  31. st = time.time()

  32. conn = httplib.HTTPConnection(HOST, PORT, False)  

  33.                conn.request('GET', URI)

  34. res = conn.getresponse()  

  35.                #print 'version:', res.version  

  36.                #print 'reason:', res.reason  

  37.                #print 'status:', res.status  

  38.                #print 'msg:', res.msg  

  39.                #print 'headers:', res.getheaders()

  40.                start_time

  41.                if res.status == 200:

  42.                    TOTAL+=1

  43.                    SUCC+=1

  44.                else:

  45.                    TOTAL+=1

  46.                    FAIL+=1

  47. timetime_span = time.time()-st

  48.                print '%s:%f\n'%(self.name,time_span)

  49.                self.maxtime(time_span)

  50.                self.mintime(time_span)

  51.                if time_span>3:

  52.                    GT3+=1

  53.                else:

  54.                    LT3+=1                    

  55.            except Exception,e:

  56.                print e

  57.                TOTAL+=1

  58.                EXCEPT+=1

  59.            conn.close()

  60.    def maxtime(self,ts):

  61.            global MAXTIME

  62.            print ts

  63.            if ts>MAXTIME:

  64. MAXTIME=ts

  65.    def mintime(self,ts):

  66.            global MINTIME

  67.            if ts<MINTIME:

  68. MINTIME=ts

  69. # main 代码开始

  70. print '===========task start==========='

  71. # 开始的时间

  72. start_time = time.time()

  73. # 并发的线程数

  74. thread_count = 300

  75. i = 0

  76. while i <= thread_count:

  77. t = RequestThread("thread" + str(i))

  78.    t.start()

  79.    i += 1

  80. t=0

  81. #并发数所有都完成或大于50秒就结束

  82. while TOTAL<thread_count|t>50:

  83.        print "total:%d,succ:%d,fail:%d,except:%d\n"%(TOTAL,SUCC,FAIL,EXCEPT)

  84.        print HOST,URI

  85.        t+=1

  86.        time.sleep(1)

  87. print '===========task end==========='

  88. print "total:%d,succ:%d,fail:%d,except:%d"%(TOTAL,SUCC,FAIL,EXCEPT)

  89. print 'response maxtime:',MAXTIME

  90. print 'response mintime',MINTIME

  91. print 'great than 3 seconds:%d,percent:%0.2f'%(GT3,float(GT3)/TOTAL)

  92. print 'less than 3 seconds:%d,percent:%0.2f'%(LT3,float(LT3)/TOTAL)


本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_33835103/article/details/85213806。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
httplibhttplib是Python 2中的一个内置库,全称为HTTP Library,用于处理HTTP协议的客户端编程。在本文中,作者使用httplib库创建HTTP连接对象,通过该对象发送GET和POST请求,并获取服务器响应结果。在Python 3中,httplib已被http.client库替代,但功能相似,均提供构造和发送HTTP请求、接收HTTP响应的方法,是进行网络通信、实现与Web服务器交互的重要工具。
threading模块threading是Python标准库提供的多线程支持模块,允许程序同时执行多个任务(线程)。在文中,作者通过自定义RequestThread类继承自threading.Thread,实现了并发访问HTTP服务器的功能。每个线程独立执行HTTP请求操作,并统计相应的时间、成功率等性能指标,从而模拟高并发场景下服务端的性能表现。
User-AgentUser-Agent是HTTP协议中的一种请求头信息,它包含了发起HTTP请求的应用程序及其版本等相关信息。在浏览器中,User-Agent通常标识了浏览器类型、版本、操作系统及设备信息等。在文章给出的示例代码中,通过设置特定的User-Agent字符串,可以模拟浏览器发送HTTP请求的行为,这对于某些服务器可能具有重要影响,因为服务器端有时会根据User-Agent信息来决定返回的内容或执行的操作。在并发测试脚本中,为了更真实地模拟用户环境,设置了类似于实际浏览器的User-Agent字符串。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在进一步了解Python中如何利用httplib库进行HTTP请求操作以及并发性能测试后,我们可以关注近期相关领域的最新动态和深入应用。例如,在Python 3.7及更高版本中,`http.client`模块已被广泛用于替代httplib,提供了更稳定且功能完善的HTTP客户端支持。同时,为提高网络I/O效率,可以探索使用异步编程模型如asyncio结合aiohttp库实现高并发HTTP请求。
近日,一篇发表在《Python开发者》杂志上的深度解析文章详细探讨了如何在大规模分布式系统中优化Python的HTTP客户端性能,其中不仅介绍了标准库的用法,还推荐了第三方库如requests、grequests等在实际项目中的最佳实践,并强调了合理设计请求头(如User-Agent)、连接池管理和超时设置对提升系统并发能力的重要性。
此外,随着云计算和微服务架构的发展,容器化和Kubernetes等技术普及,针对服务端性能测试和压测工具也不断推陈出新。比如Apache JMeter与locust等开源工具,它们能够模拟大量并发用户访问,对API接口进行压力测试,并提供详尽的性能报告,包括响应时间分布、吞吐量和错误率分析,这对于评估基于Python构建的HTTP服务在真实场景下的表现具有重要意义。
总之,通过学习和掌握Python中处理HTTP请求的基本方法和并发策略,结合当前最新的技术和工具,开发者能更好地优化应用程序在网络通信层面的性能,以满足日益增长的高并发需求。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
passwd user - 更改用户密码。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
HessianRPC在高负载下服务降级与熔断器模式保障用户体验 05-01 jQuery和TweenMax简单实用的水平手风琴特效 01-20 jquery选择国家下拉列表框插件 01-21 Sqoop在Hadoop集群中的数据传输机制及数据库迁移、收集与备份恢复应用实践 12-23 简约渔具批发牧渔企业类网站前端模板下载 11-09 基于bootstrap功能齐全的jQuery进度条插件 10-20 简约大气男性护肤产品HTML5网站模板 09-22 宽屏大气机械设备制造公司网站模板 08-13 演讲会门票销售网站模板下载 07-30 本次刷新还10个文章未展示,点击 更多查看。
经典响应式投资理财企业前端模板 06-26 基于Redis的键值对存储实现用户阅读状态跟踪与管理 06-24 Netty框架中CannotFindServerSelection异常:服务器地址配置错误与通道类型匹配详解 06-18 简洁设计公司响应式网站模板下载 05-06 绿色苗木草坪种植绿化类企业前端CMS模板下载 04-30 怎么在cmd开启mysql服务 04-15 保洁公司家庭保洁服务网站模板 03-26 SpringCloud微服务中分布式锁的死锁问题与状态一致性维护:避免循环依赖、公平锁及超时重试机制在Redisson中的实践运用 03-19 HBase性能测试与RegionServer配置、架构及数据模型调优实践:关注响应时间、并发处理能力与BlockCache优化 03-14 jquery控制radio触发事件 02-15 简约HTML5软件营销业务公司网站模板 02-09
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"