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

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

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

 __author__ = 'Tony_zhangl'
#!/usr/bin/env python
#coding=utf8
import httplib,urllib,json
httpClient = None
WebSuc, WebFal = 0,0
InfoOfWebFalse = []
ListofFalseUrl = []
InfoOfServerFalse = []
UrlList = [{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':1,'vsn':'2.3','ctype':1}},
{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1,'activityAreaType':1,'page':1,'pageNum':10}},
{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':2.3,'ctype':1}},
{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1}},
{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'vsn':'2.3','ctype':1,'channel':1,'page':1,'pageNum':10}},
{'ip':"192.168.1.195",'port':8080,'action':'xxx','post':{'uid':3,'vsn':'2.3','ctype':1,'page':1,'pageNum':10}}]
for items in UrlList:
try:
params = urllib.urlencode(items.get('post'))
headers = {"Content-type": "application/x-www-form-urlencoded","Accept":"text/plain"}
httpClient = httplib.HTTPConnection(items.get('ip'),items.get('port'),timeout=30)
httpClient.request("POST",items.get('action'),params,headers)
response = httpClient.getresponse()
# print response.status
ServerStatus = response.reason
# print response.read()
tmp = response.read()
# print tmp
d = json.loads(tmp)
# print type(tmp)
# print type(d)
if ServerStatus is not 'OK':
if not d.get('success'):
WebFal += 1
InfoOfWebFalse.append(d)
ListofFalseUrl.append(items)
else:
WebSuc +=1
else:
WebFal +=1
InfoOfServerFalse.append(response.status) except Exception, e:
print e
finally:
if httpClient:
httpClient.close()
print 'The number of success:'
print WebSuc
print 'The number of false:'
print WebFal
if InfoOfWebFalse is not None:
print 'The information of false for Webservice: '
print InfoOfWebFalse
if InfoOfServerFalse is not None:
print 'The information of false for Server:'
print InfoOfServerFalse
if ListofFalseUrl is not None:
print 'The list of url:'
print ListofFalseUrl

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

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

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

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

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

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

利用python httplib模块 发送Post请求测试web服务是否正常起来!的更多相关文章

  1. 利用python的requests发送http请求

    >>> from requests import put, get >>> put('http://localhost:5000/todo1', data={'da ...

  2. Python接口测试-使用requests模块发送GET请求

    本篇主要记录下使用python的requests模块发送GET请求的实现代码. 向服务器发送get请求:无参数时:r = requests.get(url)带params时:r = requests. ...

  3. Python接口测试-使用requests模块发送post请求

    本篇主要记录下使用python的requests模块发送post请求的实现代码. #coding=utf-8 import unittest import requests class PostTes ...

  4. 如何测试Web服务.2

    -->全文字数:2700,需要占用你几分钟的阅读时间 ,您也可以收藏后,时间充足时再阅读- -->上一节讲了<Web服务基础介绍>,本节介绍可用于测试web服务的开源测试工具. ...

  5. 如何测试Web服务.3

    -->全文字数:2254,需要占用你几分钟的阅读时间 ,您也可以收藏后,时间充足时再阅读- ->第一节讲了<Web服务基础介绍>,第二节讲了<Web服务测试工具> ...

  6. 如何测试Web服务.1

    一.什么是web服务  web服务在简单术语中可被定义为通过安装了特定设备或服务器到另一装置或客户端应用程序通过WWW彼此通信后的应用程序(万维网)提供的服务. Web服务通常在计算机网络的应用层上使 ...

  7. python用httplib模块发送get和post请求

    在python中,模拟http客户端发送get和post请求,主要用httplib模块的功能. 1.python发送GET请求 我在本地建立一个测试环境,test.php的内容就是输出一句话: 1 e ...

  8. 利用django form 模块处理post请求

    在django框架中,利用 form 模块处理post请求提交的数据,可以大大提高开发效率,减小代码冗余度,提高性能 models.py 中: from django.db import models ...

  9. 12.Python使用requests发送post请求

    1.我们使用postman进行接口测试的时候,发现POST请求方式的编码有3种,具体的编码方式如下: A:application/x-www-form-urlencoded ==最常见的post提交数 ...

随机推荐

  1. mybatis分页控件

    https://my.oschina.net/miemiedev/blog/135516

  2. (转载)ANDROID STRINGS.XML 中的特殊字符转义

    今天项目碰到个转义特殊字符的问题,网上搜索看到,故转载,已标明出处: 项目中要在string.xml 中显示特殊符号.如@号冒号等.直接写肯定不行啦 只能考虑使用ASCII码进行显示.在XML中空格符 ...

  3. USACO 3.1 Humble Numbers

    Humble Numbers For a given set of K prime numbers S = {p1, p2, ..., pK}, consider the set of all num ...

  4. openstack私有云布署实践【11.2 计算nova - compute节点配置(办公网环境)】

    这里我只使用compute1节点配置为示例,其它节点的配置基本是一样的,只是声明的管理IP不同而已   计算节点 # yum install openstack-nova-compute sysfsu ...

  5. Angular React 和 Vue的比较

    Angular(1&2),React,Vue对比 一 数据流 数据绑定 Angular 使用双向绑定即:界面的操作能实时反映到数据,数据的变更能实时展现到界面. 实现原理: $scope变量中 ...

  6. php笔记(七)PHP类于对象之多态

    <?php interface ICanEat{ public function eat($food);} class Human implements ICaneat{ public func ...

  7. css实现遮罩层,父div透明,子div不透明

    使用元素的opacity 属性,设置遮罩层的效果, 主要 样式是:background-color: #ooo; opacity:0.3; <div style="width:500p ...

  8. 快速排序(js版本)

    快速排序的时间复杂度为:O(n*log2n),相比较其他O(n2)的排序算法,还是比较有优势的.原文参考在此处,因为本人对原文的一小段代码有点不理解,所以进行了小的修改. 1.基本思想:在数组的第一个 ...

  9. Strusts2--课程笔记7

    国际化: 国际化是指,使程序在不做任何修改的情况下,就可以使用在不同的语言环境中.国际化在一般性项目中是不常用的.在编程中简称 i18n. 国际化是通过读取资源文件的形式实现的.资源文件的定义与注册, ...

  10. Linux下查看access访问日志IP统计命令

    查看 access.Log 文件ip统计 cat access.log |awk '{print $1}'|uniq -c |sort -k1,1nr 去掉r则从高到低 cat access.log ...