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中replace方法实例分析
Aug 20 Python
Python3读取zip文件信息的方法
May 22 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
Python基于numpy灵活定义神经网络结构的方法
Aug 19 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python中join函数简单代码示例
Jan 09 Python
Python中if elif else及缩进的使用简述
May 31 Python
python实现泊松图像融合
Jul 26 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
python中str内置函数用法总结
Dec 27 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 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中的动态调用实例分析
2015/01/07 PHP
PHP多维数组元素操作类的方法
2016/11/14 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
取得传值的函数
2006/10/27 Javascript
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
vscode vue 文件模板的配置方法
2019/07/23 Javascript
Python中的高级数据结构详解
2015/03/27 Python
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
pandas string转dataframe的方法
2018/04/11 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
关于Python Tkinter Button控件command传参问题的解决方式
2020/03/04 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
纯css3显示隐藏一个div特效的具体实现
2014/02/10 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
高级文秘工作总结的自我评价
2013/09/28 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
无犯罪记录证明
2014/09/19 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2014年环保工作总结
2014/11/26 职场文书
大学开学感言
2015/08/01 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python