一、缘 起
最近学习【悠悠课堂】的接口自动化教程,文中提到requests发送带cookies请求的方法,笔者随之也将其用于手头实际项目中,大致如下
二、背 景
实际需求是监控平台侧下发消息有无异常,如有异常便触发报警推送邮件,项目中下发消息接口需要带cookies
三、说 明
脚本的工程名为ynjxhdsendmsg,大致结构如下图
- sendmsg.py为主程序,函数checkmsg为在已发消息列表中查找已下发消息,函数sendmsg为发消息并根据结果返回对应的标识
- sendalertemail.py为发送邮件程序,在sendmsg.py中根据不同标识调用sendalertemail.py下的send_alert_email函数发报警邮件
四、实 现
【重点】发请求之前先加载cookies,方法如下
python" id="highlighter_215588">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
~ ...... ~ # 加载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
- 发送带当前时间戳的特定消息,在发送成功后便于通过时间戳检索
- 函数checkmsg为在已发消息列表中查找已下发消息
- 函数sendmsg为发消息并根据结果返回对应的标识
- 导入sendalertemail模块的send_alert_email方法,在sendmsg.py中根据不同标识调用send_alert_email函数发报警邮件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
#!/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' ) # 获取当前时间 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请求的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/freedomlidi/p/12431307.html