• 售前

  • 售后

热门帖子
入门百科

python 实现Requests发送带cookies的哀求

[复制链接]
味芙168 显示全部楼层 发表于 2021-10-25 19:05:34 |阅读模式 打印 上一主题 下一主题
一、缘 起


近来学习【悠悠讲堂】的接口主动化教程,文中提到Requests发送带cookies请求的方法,笔者随之也将其用于手头现实项目中,大致如下
二、背 景


现实需求是监控平台侧下发消息有无异常,如有异常便触发报警推送邮件,项目中下发消息接口必要带cookies
三、说 明


脚本的工程名为ynJxhdSendMsg,大致结构如下图

      
  • sendMsg.py为主步伐,函数checkMsg为在已发消息列表中查找已下发消息,函数sendMsg为发消息并根据结果返回对应的标识  
  • sendAlertEmail.py为发送邮件步伐,在sendMsg.py中根据差别标识调用sendAlertEmail.py下的send_alert_email函数发报警邮件
四、实 现


【重点】发请求之前先加载cookies,方法如下
  1. ~
  2. ......
  3. ~
  4. # 加载cookies
  5. # 第一步,引入RequestsCookieJar()
  6. coo = requests.cookies.RequestsCookieJar()
  7. # 第二步,设置cookies参数,coo.set('key', 'value')
  8. coo.set('__utma', '82342229.1946326147.***.1545556722.1545556733.4')
  9. coo.set('JSESSIONID', 'D898010550***ADB0600BF31FF')
  10. # 第三步,引入seeeion(),并update
  11. sess = requests.session()
  12. sess.cookies.update(coo)
  13. ~
  14. ......
  15. ~
复制代码
sendMsg.py
      
  • 发送带当前时间戳的特定消息,在发送乐成后便于通过时间戳检索  
  • 函数checkMsg为在已发消息列表中查找已下发消息  
  • 函数sendMsg为发消息并根据结果返回对应的标识  
  • 导入sendAlertEmail模块的send_alert_email方法,在sendMsg.py中根据差别标识调用send_alert_email函数发报警邮件
  1. #!/usr/bin/python
  2. # coding=utf-8
  3. # author: 葛木瓜
  4. # 2018.12.20
  5. import requests
  6. import time
  7. import re
  8. import sys
  9. sys.path.append('./')
  10. from sendAlertEmail import send_alert_email
  11. now = time.strftime('%Y.%m.%d %H:%M:%S') # 获取当前时间
  12. sendMsg_url = 'http://*.*.*.*/interactive/sendMessage.action'
  13. msgList_url = 'http://*.*.*.*/interactive/sendedMessageList.action'
  14. headers = {
  15.   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
  16.   'Content-Type': 'application/x-www-form-urlencoded'
  17.   }
  18. payload = {
  19.   'showFlag': '0',
  20.   'type': '1',
  21.   'fsnl': 'on',
  22.   'receiversId_': '63110542',
  23.   'receiveName': '9705家长;',
  24.   'content': 'Test msg sending,time ' + now,
  25.   'templateType': '1',
  26.   'addTeachername': '0',
  27.   'isGreed': '0',
  28.   'send': '1',
  29.   'startDayTime': '2018-12-20',
  30.   'hourss': '22',
  31.   'munit': '29',
  32.   'selectRole': '2',
  33.   'receiversIds': '63110542',
  34.   'templateFlag': '0'
  35. }
  36. # 加载cookies
  37. coo = requests.cookies.RequestsCookieJar()
  38. coo.set('__utma', '82342229.1946326147.***.1545556722.1545556733.4')
  39. coo.set('JSESSIONID', 'D898010550***ADB0600BF31FF')
  40. sess = requests.session()
  41. sess.cookies.update(coo)
  42. def checkMsg():
  43.   """
  44.   在已发送短信列表检查已发送短信
  45.   :return:
  46.   """
  47.   i = 1
  48.   while True:
  49.     try:
  50.       cm_resp = sess.get(msgList_url, headers=headers, allow_redirects=False)
  51.     except Exception as e:
  52.       return str(e)
  53.     else:
  54.       time.sleep(1)
  55.       cm_key = re.findall('Test msg sending,time33 ' + now, cm_resp.text)
  56.       i += 1
  57.       if i <= 30:
  58.         if len(cm_key):
  59.           break
  60.       else:
  61.         cm_key = ['More than 30 times,no result']
  62.         break
  63.   print('Request %d times' % i)
  64.   return cm_key
  65. def sendMsg():
  66.   """
  67.   send message
  68.   :return:
  69.   """
  70.   try:
  71.     resp = sess.post(sendMsg_url, headers=headers, data=payload, allow_redirects=False)
  72.   except Exception as e:
  73.     return str(e)
  74.   else:
  75.     if resp.status_code == 200:
  76.       key = re.findall('通知发送已成功', resp.text)
  77.       cm_key = checkMsg()
  78.       # print(key, cm_key)
  79.       if len(key) and len(cm_key):
  80.         if cm_key[0] == 'Test msg sending,time ' + now:
  81.           return 200
  82.         elif cm_key[0] == 'More than 30 times,no result':
  83.           return 'More than 30 times,no result'
  84.         else:
  85.           # print('Check Msg connect fail:' + str(cm_key))
  86.           return 'Check Msg connect fail: ' + cm_key
  87.     elif resp.status_code == 302:
  88.       return 302
  89.     else:
  90.       return resp.status_code
  91. if __name__ == '__main__':
  92.   receiver = ['**@***.com'] # 收件人邮件列表
  93.   status = sendMsg()
  94.   print(status)
  95.   if status == 200:
  96.     alert_content = "normal"
  97.     print('Test Success!')
  98.   elif status == 'More than 30 times,no result':
  99.     alert_content = "短信已发送,查询已发状态失败!"
  100.   elif 'Check Msg connect fail:' in str(status):
  101.     alert_content = "短信已发送,无法查询已发状态,报错信息:%s" % status.split(':')[-1]
  102.   elif status == 302:
  103.     alert_content = "Session失效,请重新获取'JSESSIONID'!"
  104.   else:
  105.     alert_content = "短信下发失败,报错信息:%s" % status
  106.   if alert_content != "normal":
  107.     send_alert_email(receiver, alert_content)
复制代码
sendAlertEmail.py,方法较常见,此处略
五、最 后


完成以上,将脚本放在jenkins上定时构建,即可实现实时监控平台侧消息下发环境并实时反馈报警邮件的需求
以上就是python 实现Requests发送带cookies请求的详细内容,更多关于python Requests发送带cookies请求的资料请关注草根技术分享别的干系文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作