首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将原始cookie转换为Netscape jar cookie并保存到文件?

如何将原始cookie转换为Netscape jar cookie并保存到文件?
EN

Stack Overflow用户
提问于 2017-12-23 13:46:44
回答 1查看 2.2K关注 0票数 3

我想向youtube-dl传递一个来自浏览器扩展的cookie文件。该扩展以原始格式发送cookie,即像VISITOR_INFO1_LIVE=_SebbjYciU0; YSC=tSqadPjjfd8; PREF=f4=4000000,但youtube-dl采用netscape jar格式的cookie(据我所知)。如果我将原始文本cookie放在一个文件中并将其传递给--cookies=file.txt参数,youtube-dl将引发异常。

我无法将原始cookies转换为jar cookies并保存到磁盘中的文件。我一直在寻找解决方案,但没有找到任何可接受的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2020-05-13 19:13:11

我在将"curl“cookie转换成wget cookie时遇到了非常类似的问题...Netscape CookieJar格式简单明了请参阅*

因此,我花了几分钟时间快速编写了一个perl脚本并生成了一个cookiejar

这是代码(可下载的here)

代码语言:javascript
运行
复制
#!/usr/bin/perl

# usage
# perl cookiejar.pl {{url}} '{{cookie-string}}'


use YAML::Syck qw(Dump);
my $expires = $^T + 86400;
my $path = '/';

my $url = shift;
my $cookies = shift;

printf "--- # %s at %u\n",__FILE__,$^T;
my $domain;
my $p = index($url,'://')+3;
my $l = index($url,'/',$p);
$domain = substr($url,$p,$l-$p);
my $dots = () = $domain =~ /\./g;
printf "dots: %s\n",$dots;
if ($dots > 1) {
   $domain = substr($domain,index($domain,'.'));
} else {
   $domain = '.'.$domain;
}
printf "domain: %s\n",$domain;
printf "url: %s\n",$url;

local *F; open F,'>','cookiejar.txt' or warn $!;
print F <<EOT;
# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This is a generated file!  Do not edit.
# domain: $domain
# url: $url

EOT
my @cookies = split'; ',$cookies;
printf "--- %s...\n",Dump(\@cookies);
foreach my $cookie (@cookies) {
   my ($key,$value) = split('=',$cookie);
   if (! $seen{$key}++) {
      # domain access path sec expire cookie value
      printf F "%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$domain,'TRUE',$path,'FALSE',$expires,$key,$value;
   }
 }
close F;
print "info: cookiejar.txt created\n";
printf "cmd: wget --load-cookie-file cookiejar.txt --referer=%s -p %s\n",$domain,$url;
printf "cmd: youtube-dl --cookie cookiejar.txt -referer %s %s\n",$domain,$url;

exit $?;

1; # $Source: /my/perl/scripts/cookiejar.pl $

您可以按如下方式运行它:

perl cookiejar.pl https://example.com/ 'cookie1=value1;cookie2=value2‘

注意:

您可能需要使用以下命令安装YAML::Syck

代码语言:javascript
运行
复制
cpan install YAML::Syck

或者只注释掉Dump()调用和use YAML::Syck行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47950098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档