python 实现Requests发送带cookies的请求


Posted in Python onFebruary 08, 2021

一、缘 起

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

二、背 景

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

三、说 明

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

python 实现Requests发送带cookies的请求

  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上定时构建,即可实现实时监控平台侧消息下发情况并及时反馈报警邮件的需求

以上就是python 实现Requests发送带cookies请求的详细内容,更多关于python Requests发送带cookies请求的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python发送Email方法实例
Aug 21 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
pandas每次多Sheet写入文件的方法
Dec 10 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
在tensorflow中实现去除不足一个batch的数据
Jan 20 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
python如何提升爬虫效率
Sep 27 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
PyCharm2020.3.2安装超详细教程
Feb 08 #Python
python 30行代码实现蚂蚁森林自动偷能量
Feb 08 #Python
如何用Python编写一个电子考勤系统
Feb 08 #Python
python编程的核心知识点总结
Feb 08 #Python
python上下文管理器异常问题解决方法
Feb 07 #Python
python中@contextmanager实例用法
Feb 07 #Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 #Python
You might like
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
2006/10/09 PHP
php简单的会话类代码
2011/08/08 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
用jQuery模拟select下拉框的简单示例代码
2014/01/26 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
JSON取值前判断
2014/12/23 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
python获取糗百图片代码实例
2013/12/18 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
Python3常见函数range()用法详解
2019/12/30 Python
python实现滑雪游戏
2020/02/22 Python
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
社区学雷锋活动策划方案
2014/01/30 职场文书
安全月活动总结
2014/05/05 职场文书
文明寝室申报材料
2014/05/12 职场文书
讲党性心得体会
2014/09/03 职场文书
2015中学教学工作总结
2015/07/22 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
Python requests用法和django后台处理详解
2022/03/19 Python