Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl脚本中使用Chromium Cookie_Perl_Cookies_Sqlite_Chromium - Fatal编程技术网

在perl脚本中使用Chromium 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

我正试图编写一个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/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)