赞
踩
Cookie 是保存在客户端(通常是浏览器)上的一个小型文本文件。它由服务器发送,并且在之后的每次请求中,客户端都会自动将这个 Cookie 附带到请求头中,发送回服务器。
在用户登录之后,为了能够准确地获取到用户的登录信息,服务器通常会生成一个唯一的 Session ID,并将其存储在 Cookie 中。这个 Cookie 会跟随请求头一起提交到服务器。这样,服务器就能够识别出这是哪一个用户,从而返回相应的数据。
可以使用 模块 requests 的 session来模拟这种行为。session
对象会自动管理和维护服务器返回的 Cookie。具体来说,当你使用 session
对象发送请求时,服务器返回的 Cookie 会被自动保存,并且在后续请求中,session
对象会自动附带这些 Cookie。
- import requests
-
- # 创建一个session对象
- session = requests.Session()
-
- # 准备用户名和密码
- data = {
- "username": "testuser",
- "password": "testpass"
- }
-
- # 设置User-Agent
- headers = {
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"
- }
-
- # 登录请求
- login_url = "https://httpbin.org/post"
- response = session.post(login_url, data=data, headers=headers)
-
- # 检查状态码
- if response.status_code == 200:
- print("登录请求成功,状态码:", response.status_code)
- else:
- print("登录请求失败,状态码:", response.status_code)
-
- # 打印响应内容
- print("登录响应内容:", response.json())
-
- # 查看session中保存的cookies
- print("Cookies:", session.cookies)
-
- # 带着cookie请求另一个页面
- response2 = session.get("https://httpbin.org/cookies")
- if response2.status_code == 200:
- print("获取Cookies页面请求成功,状态码:", response2.status_code)
- else:
- print("获取Cookies页面请求失败,状态码:", response2.status_code)
-
- # 打印获取Cookies页面的响应内容
- print("获取Cookies页面响应内容:", response2.json())
登录请求成功,状态码: 200
登录响应内容: {'args': {}, 'data': '', 'files': {}, 'form': {'password': 'testpass', 'username': 'testuser'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '35', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36', 'X-Amzn-Trace-Id': 'Root=1-669a74c2-2f1473ba4669055015c87eba'}, 'json': None, 'origin': '18.163.49.25', 'url': 'https://httpbin.org/post'}
Cookies: <RequestsCookieJar[]>
获取Cookies页面请求成功,状态码: 200
获取Cookies页面响应内容: {'cookies': {}}
防盗链,本次的请求是由哪个url产生。
- import requests
-
- # 视频页面URL
- url = "https://www.某视频.com/video_1795272"
- # 从URL中提取视频ID
- contId = url.split("_")[1]
-
- # 构造视频状态的URL
- videoStatus_url = f"https://www.某视频.com/videoStatus.jsp?contId={contId}&mrd=0.8097797275308494"
- headers = {
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
- "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
- "Referer": url
- }
-
- # 发送GET请求,获取视频状态信息
- response = requests.get(videoStatus_url, headers=headers)
- response_data = response.json()
-
- # 从返回的数据中提取系统时间和视频URL
- systemTime = response_data['systemTime']
- videoUrl = response_data["videoInfo"]['videos']['srcUrl']
-
- # 替换URL中的时间戳部分,拼接出真正的视频URL地址
- videoUrl = videoUrl.replace(systemTime, f"cont-{contId}")
- print("视频URL:", videoUrl)
-
- # 下载视频并保存为文件
- video_content = requests.get(videoUrl).content
- video_filename = f"{contId}.mp4"
- with open(video_filename, mode="wb") as f:
- f.write(video_content)
-
- print(f"视频已下载并保存为 {video_filename}")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。