繁体   English   中英

在带有字节类型数据的python中发送带有请求的cookie

[英]Sending cookies with request in python with byte-type data

我有一本格式如下的字典:

{
"cookie_name": b"xxx\xxx\xxx\xxx\xxx\xxx\xxx",
"cookie_name2": b"xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx\xxx",
...
}

我正在尝试使用requests向带有 cookie 数据的网站发送请求。

这是我尝试过的:

import requests
cookies = {...}
r = requests.post('https://linktowebsite.com', cookies=cookies)

但是,我遇到了一个错误:

    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\omaro\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 573, in request
    prep = self.prepare_request(req)
  File "C:\Users\omaro\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 471, in prepare_request
    cookies = cookiejar_from_dict(cookies)
  File "C:\Users\omaro\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\cookies.py", line 537, in cookiejar_from_dict
    cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
  File "C:\Users\omaro\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\cookies.py", line 352, in set_cookie
    and cookie.value.startswith('"')
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

我尝试过使用 UTF-8 进行编码/解码以及转换为字符串,但没有任何效果。

任何帮助将不胜感激

编辑:示例 cookie 值: {'ASP.NET_SessionId': b'v10K\xfe:\xe0\x18\xad\x08\xd3\xe0\xe8\x12\xe7`\xe7\x15lib?\xd2\xe7oX\xb4jvT7\xd5\xad\xb6\xa0 \x03G\xe1W\xb0-\xf3\x0bh\xd0\xccOI7\x10\xe7.\xaa\xbf'}

以下是如何重现我的字典:

def get_cookies(ff_cookies, col_names):
    cj = http.cookiejar
    con = sqlite3.connect(ff_cookies)
    cur = con.cursor()
    cur.execute("SELECT "+", ".join(col_names)+" FROM cookies")  # gets data for SQLlite file
    
    # iterates through all columns and adds it to list
    cookieList = [item for item in cur.fetchall()]
    cookies_dict = {}
    for name in col_names:
        cookies_dict[name] = []

    # formats dictionary using above list
    cookies_dict_keys = list(cookies_dict)
    for cookie in cookieList:
        for i in range(len(cookie)):
            cookies_dict[cookies_dict_keys[i]].append(cookie[i])

    return cookies_dict

其中ff_cookies是文件的路径, col_names是 SQL 文件中列的名称,作为字符串列表

然后将该函数的返回值输入到requests.post函数中

还需要注意的是,这个 SQL 文件是在我的边缘浏览器文件中找到的: C:\Users\username\AppData\Local\Microsoft\Edge\User Data\Default\Network\Cookies

似乎无论您从哪里获得 cookie,都不想让您阅读它们。 您可以使用binascii.hexlify将此二进制数据转换为十六进制,然后对其进行解码,以便将其作为 cookie 值传递:

试试这个代码:

import requests
import binascii

val = b"v10K\xfe:\xe0\x18\xad\x08\xd3\xe0\xe8\x12\xe7`\xe7\x15lib?\xd2\xe7oX\xb4jvT7\xd5\xad\xb6\xa0 \x03G\xe1W\xb0-\xf3\x0bh\xd0\xccOI7\x10\xe7.\xaa\xbf"
val = binascii.hexlify(val)
val = val.decode()
print(val)
cookies = {"ASP.NET_SessionId": val}


r = requests.post('https://google.com', cookies=cookies)

输出

7631304bfe3ae018ad08d3e0e812e760e7156c69623fd2e76f58b46a765437d5adb6a0200347e157b02df30b68d0cc4f493710e72eaabf

但是,我鼓励您检查您找到的所有 cookie 值是否都是这种情况。 使用此方法对它们进行解码并查看结果值是否有意义(因为它们实际上不是十六进制的可能性很小)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM