Requests session了解学习

requests

学习地址:https://www.cnblogs.com/Inbreeze/p/9882180.html

request对象的生命周期是针对一个客户端(说确切点就是一个浏览器应用程序)的一次请求,当请求完毕之后,request里边的内容就会被释放 。

简单说就是你在页面上的一个操作,request.getParameter()就是从上一个页面中的url、form中获取参数。但如果一个request涉及多个类,后面还要取参数,可以用request.setAttribute()和request.getAttribute()。但是当结果输出之后,request就结束了。

session 

session可以跨越很多页面。session的生命周期也是针对一个客户端,但是却是在别人设置的回话周期内(一般是20~30分钟),session里边的内容将一直存在,即便关闭了这个客户端浏览器,session也不一定马上释放掉,可以理解是客户端同一个IE窗口发出多个请求。这之间都可以传递参数,比如很多网站的用户登录都用到了。

比较

request占用资源比较少,安全性也比较高,可是相对来说缺乏持续性。

session则相对来说对资源的消耗会大点,安全性相对来说也会稍微低点,可是他能实现比如回话跟踪技术。

如果可以使用request的情况下,尽量使用request,因为相对于服务来说资源的消耗还是比较重要的。

在传递页面过程中request传递到下一页面就不能再传递了,而sesison却不如此,即request仅限于2个相邻的页面;

每按一个网页上的一个链接就是一个新的request,当服务器返回给浏览器一个response时,request就结束了,此时保存在request中的对象就不存在了,但是当你用一个浏器连到服务器上时application-server会新开一个session给你,当连接超时或浏览器关闭时session才销毁。所以session可以跟踪用户的状态。

session相当于是一个客户端的全局变量,比如A机与服务器第一次访问时设置session.setAttribute("aaa")="ComputerA".则在A机继续访问的任意一个页面都可以取的session.getAttribute("aaa")的值是ComputerA;  

request是某一次访问的局域变量,生命周期只是一次请求。因此login的变量应该放在session中。

使用示例

import re
import requests

session = requests.session()
url = 'http://xxxxx/phpwind/index.php'
phpwind_posting_page_header = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
}
phpwind_posting_page_cookies = {'_ac_app_ua': 'adea6823bf43d16bbd', 'zFb_winduser': 'M1i92UhAQfe%2FfdTnG9sxsa1ttUJ9HxRMAa6EkrAFGT%2ByeExFA1%2FsCIF9%2BbA%3D'}
phpwind_posting_page_param = {
    "c": "post",
    "fid": "69",
}
phpwind_posting_page_response = session.post(url=url,
                                             headers=phpwind_posting_page_header,
                                             params=phpwind_posting_page_param,
                                             cookies=phpwind_posting_page_cookies)
body = phpwind_posting_page_response.content.decode('utf-8')

csv_token = re.findall('name="csrf_token" value="(.+?)"/></form>', body)[0]
# 发帖
phpwind_posting_header = {
    "Accept": "application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",
    "X-Requested-With": "XMLHttpRequest"
}
phpwind_posting_param = {
    "c": "post",
    "a": "doadd",
    "_json": "1",
    "fid": "69"
}
phpwind_posting_data = {
    'atc_content': "测试004l",
    'atc_title': "测试004l",
    'csrf_token': csv_token,
    'pid': '',
    'reply_notice': 1,
    'special': 'default',
    'tid': ""
}
phpwind_posting_response = session.post(url=url,
                                        headers=phpwind_posting_header,
                                        params=phpwind_posting_param,
                                        data=phpwind_posting_data,
                                        cookies=phpwind_posting_page_cookies)
print(phpwind_posting_response.content.decode('utf-8'))
View Code
原文地址:https://www.cnblogs.com/ClownAlin/p/13091455.html