在perl脚本中使用Chromium Cookie
我正试图编写一个perl脚本来连接到一个网站,但在存储从Chromium SQLite数据库中获取的cookie时遇到了问题。以下是相关的代码片段:在perl脚本中使用Chromium Cookie,perl,cookies,sqlite,chromium,Perl,Cookies,Sqlite,Chromium,我正试图编写一个perl脚本来连接到一个网站,但在存储从Chromium SQLite数据库中获取的cookie时遇到了问题。以下是相关的代码片段: use HTTP::Cookies; use Data::Dumper; use feature 'say'; use DBI; my $cookie_jar = HTTP::Cookies->new(); my $dbh = DBI->connect("dbi:SQLite:dbname=/home/{user}/.config/c
use HTTP::Cookies;
use Data::Dumper;
use feature 'say';
use DBI;
my $cookie_jar = HTTP::Cookies->new();
my $dbh = DBI->connect("dbi:SQLite:dbname=/home/{user}/.config/chromium/Default/Cookies",
"", "");
my $sth = $dbh->prepare("select * from cookies where host_key='{domain}'");
$sth->execute();
my $rows;
while ($rows = $sth->fetch()) {
say Dumper($rows);
$cookie_jar->set_cookie(@$rows[0],
@$rows[1],
@$rows[2],
@$rows[3],
@$rows[4],
@$rows[5],
@$rows[6],
@$rows[7],
@$rows[8],
@$rows[9]);
say Dumper($cookie_jar);
}
$sth->finish();
$dbh->disconnect();
say Dumper($cookie_jar);
我删除了用户名和域,但“saydumper($rows)”语句返回的正是我所期望的cookie信息。因此,我知道我的SQLite数据库访问正在工作。while循环内外的“say Dumper($cookie\u-jar)”都返回一个空cookie\u-jar。我刚刚开始使用perl,所以在设置数据时,我是否缺少一些东西?在访问数组引用(如$rows)中的元素时,请使用箭头操作符。在您的情况下,更改:
@$rows[0]
收件人:$rows->[0]
对于每个元素。我发现没有标准的cookie值或存储它们的标准顺序。Chromium Cookie中的字段0-9未映射到HTTP::Cookie中的字段0-9。似乎set_cookie方法失败了,因为它的值很奇怪,但没有详细说明它的错误。我意识到更好的方法是对行使用hashrefs,这样我就有了更可读的代码:
# set_cookie($version, $key, $val, $path, $domain,
# $port, $path_spec, $secure, $maxage, $discard, \%rest )
while ($rows = $sth->fetchrow_hashref()) {
$cookie_jar->set_cookie(0,
$rows->{name},
$rows->{value},
$rows->{path},
$rows->{host_key},
443,
0,
$rows->{secure},
1000000,
0);
say Dumper($cookie_jar);
}
我在注释中添加了set_cookie值,以使该方法对其他人更为明显,使其适应自己的目的。这似乎不是该脚本的核心问题,因此这不是真正的答案。(顺便说一句,
$$arr[0]
和$arr->[0]
是完全等效的。你忘了提到显而易见的解决方案,数组切片@$arr[0..9]
)我尝试了所有这些访问方法,虽然知道引用数组的替代方法非常方便(特别是@code>@$arr[0..9]),它们都没有解决持久性问题。或者通过使用select语句为您提供与set\u cookie的预期参数匹配的列:“从cookie中选择0、名称、值、路径、主机密钥、null、null、secure、600”
然后$cookie\u jar->set\u cookie(@$rows)代码>