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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
python中的set实现不重复的排序原理
Jan 24 Python
单利模式及python实现方式详解
Mar 20 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
HTML的form表单和django的form表单
Jul 25 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
django-初始配置(纯手写)详解
Jul 30 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
Python 实现向word(docx)中输出
Feb 13 Python
Python装饰器用法与知识点小结
Mar 09 Python
一文详述 Python 中的 property 语法
Sep 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
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
瀑布流布局并自动加载实现代码
2013/03/12 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
vue 实现复制内容到粘贴板clipboard的方法
2018/03/17 Javascript
vue的for循环使用方法
2019/02/12 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
vue实现放大镜效果
2020/09/17 Javascript
Python备份Mysql脚本
2008/08/11 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
基于Python函数和变量名解析
2019/07/19 Python
python @classmethod 的使用场合详解
2019/08/23 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
资产经营总监岗位职责范文
2013/12/01 职场文书
绿色出行口号
2014/06/18 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
怎样写观后感
2015/06/19 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript