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程序实例(通讯录)
Nov 29 Python
Python实现控制台输入密码的方法
May 29 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
python 用所有标点符号分隔句子的示例
Jul 15 Python
下载官网python并安装的步骤详解
Oct 12 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
用Python绘制漫步图实例讲解
Feb 26 Python
构建高效的python requests长连接池详解
May 02 Python
浅谈OpenCV中的新函数connectedComponentsWithStats用法
Jul 05 Python
如何解决python多种版本冲突问题
Oct 13 Python
Python如何识别银行卡卡号?
Jun 10 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自定义apk安装包实例
2014/10/20 PHP
PHP实现微信对账单处理
2018/10/01 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
node.js 一个简单的页面输出实现代码
2012/03/07 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
python网页请求urllib2模块简单封装代码
2014/02/07 Python
连接Python程序与MySQL的教程
2015/04/29 Python
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
基于Python 的进程管理工具supervisor使用指南
2016/09/18 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python BS4库的安装与使用详解
2018/08/08 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
详解Python 函数参数的拆解
2020/09/02 Python
python实现学生信息管理系统源码
2021/02/22 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
应届生服务员求职信
2013/10/31 职场文书
应聘教师求职信
2014/07/19 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
2015年度保密工作总结
2015/04/24 职场文书
MongoDB使用场景总结
2022/02/24 MongoDB