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的组合模式与责任链模式编程示例
Feb 02 Python
python机器学习库常用汇总
Nov 15 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python八皇后问题的解决方法
Sep 27 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Python turtle绘画象棋棋盘
Aug 21 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
python通过opencv实现图片裁剪原理解析
Jan 19 Python
python中tkinter复选框使用操作
Nov 11 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在各种web服务器的运行模式详解
2013/06/03 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
php和asp语法上的区别总结
2019/05/12 PHP
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
JavaScript字符串转数字的5种方法及遇到的坑
2018/07/16 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
Python控制多进程与多线程并发数总结
2016/10/26 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python数据结构之链表的实例讲解
2017/07/25 Python
python使用RNN实现文本分类
2018/05/24 Python
简单了解python元组tuple相关原理
2019/12/02 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
关于递归的一道.NET面试题
2013/05/12 面试题
教师自我反思材料
2014/02/14 职场文书
企业员工培训感言
2014/02/26 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
服装采购员岗位职责
2014/03/15 职场文书
交通事故和解协议书
2014/09/25 职场文书
给朋友的道歉短信
2015/05/12 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android