python中如何设置cookie?

rnd=''.join(random.choice(string.ascii_letters+string.digits) for i in range(20))
cookies={
    'PHPSESSID':'tij5spnhu47e7vjhr30hnsvld6',
    'RcGFvmlusername':'%CC%EC%CF%C2%dD3',
    'RcGFvmluserid':'8245',
    'RcGFvmlgroupid':'1',
    'RcGFvmlrnd':rnd,
    'RcGFvmlinfo':'%5B%22http%3A%5C%2F%5C%2Fthirdqq.qlogo.cd',
    'RcGFvmlauth':'b70d369b4e0010b5e08cd0419d7d7a52'
}

如上一段JSON字符串在requests.get中如何设置header

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0',
    'Priority': 'u=0',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Cookie':json.dumps(cookies)
}

本人json.dumps(cookies)设置之后,请求不起作用!
该怎么修改,其中rnd是一段字符与数字组成的20为的字符串,动态生成。

阅读 798
2 个回答

你用 json.dumps 本身就不对。json.dumps 是将 dict 转化为 json string,cookie 的格式并不是 json string,而是 ;分割的 k=v 对,例如: k1=v1; k2=v2; ...

所以如果手动拼接 cookie,你必须拼接成上述格式,例如:

cookies={
    'PHPSESSID':'tij5spnhu47e7vjhr30hnsvld6',
    'RcGFvmlusername':'%CC%EC%CF%C2%dD3',
    'RcGFvmluserid':'8245',
    'RcGFvmlgroupid':'1',
    'RcGFvmlrnd':rnd,
    'RcGFvmlinfo':'%5B%22http%3A%5C%2F%5C%2Fthirdqq.qlogo.cd',
    'RcGFvmlauth':'b70d369b4e0010b5e08cd0419d7d7a52'
}

cookies_str = '; '.join(f"{k}={v}" for k, v in cookies.items())

或者直接使用 python 标准库处理:

from urllib.parse import urlencode

urlencode(cookies)

如果你使用的是 requests 类库,则会自动帮你处理 cookie,比如:

import requests

requests.get('https://www.example.com', cookies=cookies)
import random
import string

# 生成20位随机字符串
rnd = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(20))

# Cookie字典
cookies = {
    'PHPSESSID': 'tij5spnhu47e7vjhr30hnsvld6',
    'RcGFvmlusername': '%CC%EC%CF%C2%dD3',
    'RcGFvmluserid': '8245',
    'RcGFvmlgroupid': '1',
    'RcGFvmlrnd': rnd,
    'RcGFvmlinfo': '%5B%22http%3A%5C%2F%5C%2Fthirdqq.qlogo.cd',
    'RcGFvmlauth': 'b70d369b4e0010b5e08cd0419d7d7a52'
}

# 正确的Cookie字符串构建方法
cookie_str = '; '.join([f"{key}={value}" for key, value in cookies.items()])

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:148.0) Gecko/20100101 Firefox/148.0',
    'Priority': 'u=0',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Cookie': cookie_str  # 直接使用构建好的字符串,不要用json.dumps()
}

# 发送请求
response = requests.get('你的URL', headers=header)