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实现基于SVM手写数字识别功能
May 27 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python生成ppt的方法
Jun 07 Python
numpy下的flatten()函数用法详解
May 27 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
python的range和linspace使用详解
Nov 27 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Pycharm操作Git及GitHub的步骤详解
Oct 27 Python
解决TensorFlow训练模型及保存数量限制的问题
Mar 03 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
PHP 7.0新增加的特性介绍
2017/06/08 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
表格 隔行换色升级版
2009/11/07 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
layui表格数据重载
2019/07/27 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
跟老齐学Python之集合(set)
2014/09/24 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python添加菜单图文讲解
2019/06/04 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python 下载及安装详细步骤
2019/11/04 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
学生励志演讲稿
2014/01/06 职场文书
欢迎新生标语
2014/10/06 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
督导岗位职责
2015/02/04 职场文书
慰问信格式
2015/02/14 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
电影圆明园观后感
2015/06/03 职场文书
Python实现天气查询软件
2021/06/07 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
如何利用python实现列表嵌套字典取值
2022/06/10 Python