我正在使用bash来发布到一个需要我先登录的网站。所以我需要使用登录 cookie 发送请求。所以我尝试登录并保留cookie,但它不起作用,因为该网站使用javascript以一种非常奇怪的方式对密码进行哈希处理,所以我将只从Chrome获取该网站的登录cookie。如何从 Chrome 获取 cookie 并将其格式化为 Curl?
我正在尝试这样做:
curl --request POST -d "a=X&b=Y" -b "what goes here?" "site.com/a.php"
- 按 F12 打开开发者控制台(Mac:Cmd+Opt+J)
- 查看"网络"选项卡。
- 在网站上执行任何您需要的操作以触发您感兴趣的操作
- 右键单击相关请求,然后选择"复制为 cURL"
这将为您提供触发的操作的 curl 命令,其中完全填充了 cookie 和所有内容。当然,您也可以复制标志作为新 curl 命令的基础。
在 Chrome 中:
- 打开 Web 开发人员工具(查看 -> 开发人员
- -> 开发人员工具)
- 打开"应用程序"选项卡(在旧版本上为"资源")
- 打开饼干树
- 找到您感兴趣的饼干。
在终端中
- 将
--cookie "cookiename=cookievalue"
添加到 curl 请求中。
在Chrome/Chromium中有一种更简单的方法可以做到这一点。开源的Chrome扩展程序Cookie.txt 将 Cookie 数据导出到 Cookie.txt 文件中,并生成可选的现成 wget 命令。
*我与扩展无关,它运行良好。
不敢相信没有人提到过这个。这是最简单,最快捷的方法。
只需打开浏览器的Developer Tools
,单击Console
选项卡,最后在控制台中,只需键入以下内容并按 ENTER...
console.log(document.cookie)
结果将立即以正确的语法打印。只需突出显示并复制它。
我很好奇其他人是否报告chrome不允许"复制为卷曲"功能不再具有cookie。
然后我突然想到,这就像一个安全理念。 如果您访问 example.com
,将请求作为 curl 复制到example.com
将具有 cookie。 但是,将请求复制到其他域或子域将清理 Cookie。 例如,a.example.com
或test.com
将没有cookie。
对于任何想要网站的所有 cookie 但不想使用扩展程序的人:
- 打开开发人员工具 ->应用程序 -> Cookie。
- 选择列表中的第一个cookie,然后点击
Ctrl
/Cmd
-A
- 使用
Ctrl
/Cmd
-C
复制此表中的所有数据
现在,您有一个 Cookie 数据的 TSV(制表符分隔值)字符串。你可以用任何你想要的语言来处理它,但在Python中(例如):
import io
import pandas as pd
cookie_str = """[paste cookie str here]"""
# Copied from the developer tools window.
cols = ['name', 'value', 'domain', 'path', 'max_age', 'size', 'http_only', 'secure', 'same_party', 'priority']
# Parse into a dataframe.
df = pd.read_csv(io.StringIO(cookie_str), sep='t', names=cols, index_col=False)
现在,您可以将它们导出为Netscape格式:
# Fill in NaNs and format True/False for cookies.txt.
df = df.fillna(False).assign(flag=True).replace({True: 'TRUE', False: 'FALSE'})
# Get unix timestamp from max_age
max_age = (
df.max_age
.replace({'Session': np.nan})
.pipe(pd.to_datetime))
start = pd.Timestamp("1970-01-01", tz='UTC')
max_age = (
((max_age - start) // pd.Timedelta('1s'))
.fillna(0) # Session expiry are 0s
.astype(int)) # Floats end with ".0"
df = df.assign(max_age=max_age)
cookie_file_cols = ['domain', 'flag', 'path', 'secure', 'max_age', 'name', 'value']
with open('cookies.txt') as fh:
# Python's cookiejar wants this header.
fh.write('# Netscape HTTP Cookie Filen')
df[cookie_file_cols].to_csv(fh, sep='t', index=False, header=False)
最后,回到外壳:
# Get user agent from navigator.userAgent in devtools
wget -U $USER_AGENT --load-cookies cookies.txt $YOUR_URL