• 利用python httplib模块 发送Post请求测试web服务是否正常起来!


        最近在学习python,恰好老大最近让我搞个基于post请求测试web服务是否正常启用的小监控,上网查了下资料,发现强大的Python恰好能够用上,所以自己现学现卖,顺便锻炼下自己。

        由于本人也刚接触这块不久属于菜鸟级别,所以在任务之前,只能上网把基于post请求的web监控了解清楚,这些资料网上很多,因为本人认为完成这类任务最重要的就是要将实现的原理研究清楚,写程序只是实现的工具,如果大的逻辑不正确,后面的都是白忙活。

       了解post发送请求的原理后,利用Python的httplib模块进行逻辑构造实现的代码如下:

     1 __author__ = 'Tony_zhangl'
     2 #!/usr/bin/env python
     3 #coding=utf8
     4 import httplib,urllib,json
     5 httpClient = None
     6 WebSuc, WebFal = 0,0
     7 InfoOfWebFalse = []
     8 ListofFalseUrl = []
     9 InfoOfServerFalse = []
    10 UrlList = [{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':1,'vsn':'2.3','ctype':1}},
    11            {'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1,'activityAreaType':1,'page':1,'pageNum':10}},
    12            {'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':2.3,'ctype':1}},
    13            {'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1}},
    14            {'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'vsn':'2.3','ctype':1,'channel':1,'page':1,'pageNum':10}},
    15            {'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1,'page':1,'pageNum':10}}]
    16 for items in UrlList:
    17     try:
    18         params = urllib.urlencode(items.get('post'))
    19         headers = {"Content-type": "application/x-www-form-urlencoded","Accept":"text/plain"}
    20         httpClient = httplib.HTTPConnection(items.get('ip'),items.get('port'),timeout=30)
    21         httpClient.request("POST",items.get('action'),params,headers)
    22         response = httpClient.getresponse()
    23 #       print response.status
    24         ServerStatus = response.reason
    25 #       print response.read()
    26         tmp = response.read()
    27 #       print tmp
    28         d = json.loads(tmp)
    29 #       print type(tmp)
    30 #        print type(d)
    31         if ServerStatus is not 'OK':
    32             if not d.get('success'):
    33                 WebFal += 1
    34                 InfoOfWebFalse.append(d)
    35                 ListofFalseUrl.append(items)
    36             else:
    37                 WebSuc +=1
    38         else:
    39             WebFal +=1
    40             InfoOfServerFalse.append(response.status)
    41 
    42     except Exception, e:
    43         print e
    44     finally:
    45         if httpClient:
    46             httpClient.close()
    47 print 'The number of success:'
    48 print WebSuc
    49 print 'The number of false:'
    50 print WebFal
    51 if InfoOfWebFalse is not None:
    52     print 'The information of false for Webservice: '
    53     print InfoOfWebFalse
    54 if InfoOfServerFalse is not None:
    55     print 'The information of false for Server:'
    56     print InfoOfServerFalse
    57 if ListofFalseUrl is not None:
    58     print 'The list of url:'
    59     print ListofFalseUrl

        本人将要测试的url以及body都放在了嵌套字典的列表中,方便后面的索引处理。

      遇到的主要问题有关于json格式的处理,由于response.read()得到的是一个行似与字典的字符串,一开始为了处理得到的这个字段花费了很久的时间去处理,因为我在引用response.read()时只有第一次是生效的,后面再引用时发现为空,由于本人页属于小白级别,只能求助自己的一位哥们,在他分析了一段时间后,发现response.read()为object对象,只能引用一次,如果后面想继续使用的话,一定要赋给自己定义的变量,(PS:也许别人用起来比较简单,但是由于本人的生疏,确实不了解obj的使用)。其实以上本人遇到的都是小问题,虽然整体的思路对了,但是细节实现上自己处理的比较慢,应该是我使用不多以及学习的还不够深入。

      由于第一次在博客园写博客,写的有点乱,实在抱歉,针对此次的任务,本人总结如下:

         其实UrlOfList最好表示为元组:因为其中的内容是不可变的,作为python的初衷,使用元组才是最理想的方法,不过我的功力目前还欠佳,只要将功能实现后,我会在后期继续完善;

      最后的输出还需继续晚上,因为这样的结果自己认为可读性不高,还需要继续完善。

      不过作为第一次应用,自己深感要学的太多了,还需继续努力,如果有大神前辈发现其中能完善的很多,还望多多指教!!!共勉!

  • 相关阅读:
    OpenSergo & CloudWeGo 共同保障微服务运行时流量稳定性
    开源小白到核心开发——我与 sealer 的成长故事
    Serverless 架构下的 AI 应用开发:入门、实战与性能优化
    KubeVela 1.5:灵活框选 CNCF 原子能力打造独特的企业应用发布平台
    全链路灰度新功能:MSE 上线配置标签推送
    提质增效,安全灵活,阿里云EDA上云方案让芯片设计驶入高速路
    极致体验!基于阿里云 Serverless 快速部署 Function
    企业分账如何帮助用户解决成本优化和预算分配的问题
    我们总结了弹性伸缩的五个条件与六个教训
    数据变更白屏化利器推送轨迹上线
  • 原文地址:https://www.cnblogs.com/kirago/p/4123416.html
Copyright © 2020-2023  润新知