一、缘 起

最近学习【悠悠课堂】的接口自动化教程,文中提到Requests发送带cookies请求的方法,笔者随之也将其用于手头实际项目中,大致如下

二、背 景

实际需求是监控平台侧下发消息有无异常,如有异常便触发报警推送邮件,项目中下发消息接口需要带cookies

三、说 明

脚本的工程名为ynJxhdSendMsg,大致结构如下图

  1. sendMsg.py为主程序,函数checkMsg为在已发消息列表中查找已下发消息,函数sendMsg为发消息并根据结果返回对应的标识
  2. sendAlertEmail.py为发送邮件程序,在sendMsg.py中根据不同标识调用sendAlertEmail.py下的send_alert_email函数发报警邮件

四、实 现

  • 【重点】发请求之前先加载cookies,方法如下
~
......
~
# 加载cookies
# 第一步,引入RequestsCookieJar()
coo = requests.cookies.RequestsCookieJar()
# 第二步,设置cookies参数,coo.set('key', 'value')
coo.set('__utma', '82342229.1946326147.***.1545556722.1545556733.4')
coo.set('JSESSIONID', 'D898010550***ADB0600BF31FF')
# 第三步,引入seeeion(),并update
sess = requests.session()
sess.cookies.update(coo)
~
......
~
  • sendMsg.py
  1. 发送带当前时间戳的特定消息,在发送成功后便于通过时间戳检索
  2. 函数checkMsg为在已发消息列表中查找已下发消息
  3. 函数sendMsg为发消息并根据结果返回对应的标识
  4. 导入sendAlertEmail模块的send_alert_email方法,在sendMsg.py中根据不同标识调用send_alert_email函数发报警邮件
#!/usr/bin/python
# coding=utf-8
# author: 葛木瓜
# 2018.12.20 import requests
import time
import re
import sys
sys.path.append('./')
from sendAlertEmail import send_alert_email now = time.strftime('%Y.%m.%d %H:%M:%S') # 获取当前时间
sendMsg_url = 'http://*.*.*.*/interactive/sendMessage.action'
msgList_url = 'http://*.*.*.*/interactive/sendedMessageList.action'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
'Content-Type': 'application/x-www-form-urlencoded'
}
payload = {
'showFlag': '0',
'type': '1',
'fsnl': 'on',
'receiversId_': '63110542',
'receiveName': '9705家长;',
'content': 'Test msg sending,time ' + now,
'templateType': '1',
'addTeachername': '0',
'isGreed': '0',
'send': '1',
'startDayTime': '2018-12-20',
'hourss': '22',
'munit': '29',
'selectRole': '2',
'receiversIds': '63110542',
'templateFlag': '0'
} # 加载cookies
coo = requests.cookies.RequestsCookieJar()
coo.set('__utma', '82342229.1946326147.***.1545556722.1545556733.4')
coo.set('JSESSIONID', 'D898010550***ADB0600BF31FF')
sess = requests.session()
sess.cookies.update(coo) def checkMsg():
"""
在已发送短信列表检查已发送短信
:return:
"""
i = 1
while True:
try:
cm_resp = sess.get(msgList_url, headers=headers, allow_redirects=False)
except Exception as e:
return str(e)
else:
time.sleep(1)
cm_key = re.findall('Test msg sending,time33 ' + now, cm_resp.text)
i += 1
if i <= 30:
if len(cm_key):
break
else:
cm_key = ['More than 30 times,no result']
break
print('Request %d times' % i)
return cm_key def sendMsg():
"""
send message
:return:
"""
try:
resp = sess.post(sendMsg_url, headers=headers, data=payload, allow_redirects=False)
except Exception as e:
return str(e)
else:
if resp.status_code == 200:
key = re.findall('通知发送已成功', resp.text)
cm_key = checkMsg()
# print(key, cm_key)
if len(key) and len(cm_key):
if cm_key[0] == 'Test msg sending,time ' + now:
return 200
elif cm_key[0] == 'More than 30 times,no result':
return 'More than 30 times,no result'
else:
# print('Check Msg connect fail:' + str(cm_key))
return 'Check Msg connect fail: ' + cm_key
elif resp.status_code == 302:
return 302
else:
return resp.status_code if __name__ == '__main__': receiver = ['**@***.com'] # 收件人邮件列表
status = sendMsg()
print(status)
if status == 200:
alert_content = "normal"
print('Test Success!')
elif status == 'More than 30 times,no result':
alert_content = "短信已发送,查询已发状态失败!"
elif 'Check Msg connect fail:' in str(status):
alert_content = "短信已发送,无法查询已发状态,报错信息:%s" % status.split(':')[-1]
elif status == 302:
alert_content = "Session失效,请重新获取'JSESSIONID'!"
else:
alert_content = "短信下发失败,报错信息:%s" % status
if alert_content != "normal":
send_alert_email(receiver, alert_content)
  • sendAlertEmail.py,方法较常见,此处略

五、最 后

完成以上,将脚本放在jenkins上定时构建,即可实现实时监控平台侧消息下发情况并及时反馈报警邮件的需求

OK!

~

~

~

不积跬步,无以至千里

Requests发送带cookies请求的更多相关文章

  1. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  2. python的requests库怎么发送带cookies的请求

     背景: 在用robot做接口自动化时,有一个查询接口需要用到登录后返回的token等信息作为cookies作为参数一起请求(token是在返回体中,并不在cookies中), 刚好create se ...

  3. python使用requests发送multipart/form-data请求数据

    def client_post_mutipart_formdata_requests(request_url,requestdict): #功能说明:发送以多部分表单数据格式(它要求post的消息体分 ...

  4. Python入门:模拟登录(二)或注册之requests处理带token请求

    转自http://blog.csdn.net/foryouslgme/article/details/51822209 首先说一下使用Python模拟登录或注册时,对于带token的页面怎么登录注册模 ...

  5. python使用requests发送application/x-www-form-urlencoded请求数据

    def client_post_formurlencodeddata_requests(request_url,requestJSONdata): #功能说明:发送以form表单数据格式(它要求数据名 ...

  6. requests库的get请求,带有cookies

    (一)如何带cookies请求 方法一:headers中带cookies #coding:utf-8 import requests import re # 构建url url = 'http://w ...

  7. 测试框架httpclent 3.获取cookie的信息,然后带cookies去发送请求

    在properties文件里面: startupWithCookies.json [ { "description":"这是一个会返回cookies信息的get请求&qu ...

  8. requests模块发送带headers的Get请求和带参数的请求

    1.在PyCharm开发工具中新建try_params.py文件: 2.try_params.py文件中编写代码: import requests#设置请求Headers头部header = {&qu ...

  9. Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据

    Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...

随机推荐

  1. linux有些sh文件,为什么要用 ./ 来执行

    因为有环境变量PATH,里面包含了许多目录,这些目录下的可执行文件就无需输入完整路径来执行.你可以用 echo "$PATH"查看当前的环境变量包含的目录,自带的命令文件都是在PA ...

  2. 前端js代码以备不时之需

    //获取id元素信息let getId = (args) => { return document.getElementById(args);} //获取类名元素let getClassName ...

  3. <SCOI2009>粉刷匠の思路

    emm.dp真的是写不来啊难过 不边写边注释我就挂了 #include<cstdio> #include<cstring> #include<iostream> # ...

  4. Algorithms第3章及少量习题

    第三章的主要思想就是DFS.讲了图上的DFS操作,然后讲了各种应用.这章默认图都是用邻接矩阵存的. procedure explore(G, v) Input: G = (V, E) is a gra ...

  5. 使用pandas,numpy进行数据分析建模的一些常用命令

    1.读取文件为pandas格式: import pandas as pd import numpy as np dataset = pd.read_csv("C:/Users/Adminis ...

  6. SpringMVC之参数绑定

    1.Controller package com.tz.controller; import org.springframework.beans.factory.annotation.Required ...

  7. MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解

    .安装环境 .基本环境配置 .Master的配置 .Slave的配置 .添加需要同步的从库Slave .真正的测试 安装环境 1 操作系统 :CentOS 6.5 2 数据库版本:MySQL 5.6. ...

  8. Janet Wu price

    上次也是第一次参加百公里是2012的时候,那年的主题是一路有你,和一群同事从深圳湾走到福田,最后累了就回家了,那晚应该是睡得很好吧. 今年是提前报名了,虽然还不确定是否参加.因为说实话,我不喜欢拥堵的 ...

  9. Dubbo源码学习(二)

    @Adaptive注解 在上一篇ExtensionLoader的博客中记录了,有两种扩展点,一种是普通的扩展实现,另一种就是自适应的扩展点,即@Adaptive注解的实现类. @Documented ...

  10. 告别ThinkPHP6的异常页面, 让我们来拥抱whoops吧

    春节期间熟悉了TP6, 也写了一个TP6的博客程序,但系统的异常页面实在另外头疼,很多时候无法查看到是哪行代码出的问题. 所以就特别的想把whoops引进来,经过一系列的研究,终于找到了解决的办法: ...