请求头中的Cookie和Referer(学习笔记)

Cookie

        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': {}}

Referer

        防盗链,本次的请求是由哪个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}")

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值