【问题标题】:How to specify cookies stored in file with perl module LWP::UserAgent如何使用 perl 模块 LWP::UserAgent 指定存储在文件中的 cookie
【发布时间】:2021-03-19 14:55:11
【问题描述】:

我有以下一段代码,它使用从另一个 perl 程序收集的 cookie 使用 perl 模块 LWP::UserAgent 登录到共享点网站。

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::CookieJar::LWP ();
use HTTP::Cookies;

my $resultXML='C:\Docs\Result.txt';
my $url="https://[mydomain].sharepoint.com/_api/contextinfo";
        
my $cookie_jar_obj = HTTP::Cookies->new();
$cookie_jar_obj->load( $resultXML );
my $lwp = LWP::UserAgent->new();
$lwp->cookie_jar( $cookie_jar_obj ); 
        
print $lwp->cookie_jar->as_string() . "\n";

my $response = $lwp->request(POST $url);
print $response->content . "\n";

存储在变量$resultXML中的文件包含以下cookie信息:

#LWP-Cookies-1.0
Set-Cookie3:rtFa=UROIhi84Sxr8o0DZHximQjlCOUI2QzItMzRDMC00N0Q1LTgyQ0EtMzI1MzhCRjNERTZDjQiIQbx0/QTRCNtpvjQTaZEcjpYFSkKHsPK+d1Nlnx6MuaDI/Xs21W7orysOeYPRRoDCCX/3ZtL61T3SHYfMkPeqXTJ4rloliGHsN7tuQXeI6OYAXXs8ysayP4VzpJyQEm+S0zvjkVLLtanQ5RDfQ1bnYq9ayu7L5HDJDNaKQhmhXmTdodwTlvwJRRyWgLL/GCuWWyAXEppy9Ta7PzpO76sb9c91ssScjDJY/Fw7TIPipleMgjjnHud1Os/NAihtTxTMWxS5XpiZbCh6DtvPwYyZXE54nsyhIekRvrixFQ0PeZinWpAkUAAAA=; domain=sharepoint.com; path=/; SameSite=None; secure; HttpOnly;FedAuth=77u/PD94bWwgdmVyc2lvbj0wIiBlbmNvZGluZz0idXRmLTgiPz48U1A+VjksMGguZnxtZW1iZXJzaGlwfDEwMDNiZmZkOWUwNzg1MmVAbGl2ZS5jb20sfGFnb3R0c0B0bG1seW9uLm9ubWljcm9zb2Z0LmNvbSwxMzI2MDYzNzYxMjAwMDAwMDAsMTMyMzk3ODg0ODcwMDAwMDAwLDEzMjYwNzI0MDEzMzA3NjA2MSwwLjAuMC4wLDIsYjliOWI2YzItMzRjMC00N2Q1LTgyY2EtMzI1MzhiZjNkZTZjLCwsMGU4ZmUtYTliZS00OGI2LWEzYTgtYmM5OGViZjQ0ZDM1LDIyZDhlOGZlLWE5YmUtNDhiNi1hM2E4LWJjOThlYmY0NGQzNSwsMCwwLDAsLCwsMjY1MDQ2NsLCwscjEyUzEwdzJWT2ZKNXVFRWVLWFBwUUxRYnIrdnp6QnM2R2hnMGQxOTlzcGZ1SnBpSWx0S2pvZmJSVnVVY2FzUzd0TkxVOUxlcklZenA1cndPYmhMeDJ0V2pnUmZidElnSVZRQnZWSGxZWlVocTBpN3lyWkVkMHNnRjFvVTAwY1B3Qmt2WUdrRDZkK2Z3NzRjFCWFFvSjBDb0d4UXVYd01DT2tQb0RhWEdDQkdVbmt2Si9Bc3BCbm5Jb1JXSUxBRjgrZ2JLTjU3RURGbFU0V09XZGdiZFdxM3JLVWg5aGs5NnhRRXVad25laXphRjR3STlkejJvTEROYnA0NDNZWm8rZXN6YmlLR2tqdkhBRGx2L1B5SjllRlBDNHhtNS9qVkQ2NUtSUk9YYnN4MEhxNnJSVVdzVHhPdzU5VXJ1M2lBPT08L1NQPg==; path=/; SameSite=None; secure; HttpOnly;

如果我从“rtFA=”部分开始将此信息复制并粘贴到“高级 REST 客户端”chrome 扩展中,我会得到成功的响应。

但是在打印条目时

$lwp->cookie_jar->as_string()

结果中有多余的双引号字符。即

Set-Cookie3:rtFa="UROIhi84Sxr8o0DZHximQjlCOUI2QzItMzRDMC00N0Q1LTgyQ0EtMzI1MzhCRjNERTZDjQiIQbx0/QTRCNtpvjQTaZEcjpYFSkKHsPK+d1Nlnx6MuaDI/Xs21W7orysOeYPRRoDCCX/3ZtL61T3SHYfMkPeqXTJ4rloliGHsN7tuQXeI6OYAXXs8ysayP4VzpJyQEm+S0zvjkVLLtanQ5RDfQ1bnYq9ayu7L5HDJDNaKQhmhXmTdodwTlvwJRRyWgLL/GCuWWyAXEppy9Ta7PzpO76sb9c91ssScjDJY/Fw7TIPipleMgjjnHud1Os/NAihtTxTMWxS5XpiZbCh6DtvPwYyZXE54nsyhIekRvrixFQ0PeZinWpAkUAAAA="; domain=sharepoint.com; path=/; SameSite=None; secure; HttpOnly;FedAuth="77u/PD94bWwgdmVyc2lvbj0wIiBlbmNvZGluZz0idXRmLTgiPz48U1A+VjksMGguZnxtZW1iZXJzaGlwfDEwMDNiZmZkOWUwNzg1MmVAbGl2ZS5jb20sfGFnb3R0c0B0bG1seW9uLm9ubWljcm9zb2Z0LmNvbSwxMzI2MDYzNzYxMjAwMDAwMDAsMTMyMzk3ODg0ODcwMDAwMDAwLDEzMjYwNzI0MDEzMzA3NjA2MSwwLjAuMC4wLDIsYjliOWI2YzItMzRjMC00N2Q1LTgyY2EtMzI1MzhiZjNkZTZjLCwsMGU4ZmUtYTliZS00OGI2LWEzYTgtYmM5OGViZjQ0ZDM1LDIyZDhlOGZlLWE5YmUtNDhiNi1hM2E4LWJjOThlYmY0NGQzNSwsMCwwLDAsLCwsMjY1MDQ2NsLCwscjEyUzEwdzJWT2ZKNXVFRWVLWFBwUUxRYnIrdnp6QnM2R2hnMGQxOTlzcGZ1SnBpSWx0S2pvZmJSVnVVY2FzUzd0TkxVOUxlcklZenA1cndPYmhMeDJ0V2pnUmZidElnSVZRQnZWSGxZWlVocTBpN3lyWkVkMHNnRjFvVTAwY1B3Qmt2WUdrRDZkK2Z3NzRjFCWFFvSjBDb0d4UXVYd01DT2tQb0RhWEdDQkdVbmt2Si9Bc3BCbm5Jb1JXSUxBRjgrZ2JLTjU3RURGbFU0V09XZGdiZFdxM3JLVWg5aGs5NnhRRXVad25laXphRjR3STlkejJvTEROYnA0NDNZWm8rZXN6YmlLR2tqdkhBRGx2L1B5SjllRlBDNHhtNS9qVkQ2NUtSUk9YYnN4MEhxNnJSVVdzVHhPdzU5VXJ1M2lBPT08L1NQPg=="; path=/; SameSite=None; secure; HttpOnly;

如果我再次复制并粘贴此信息,从“rtFA=”部分开始到“高级 REST 客户端”chrome 扩展程序中,我会收到错误 403 Forbidden 错误,这正是我在运行其余部分时得到的之后的代码

打印 $lwp->cookie_jar->as_string() 。 "\n";

声明。

如何阻止 perl 插入这些似乎阻止我的 perl 脚本连接到网站的额外双引号 (") 标记?

【问题讨论】:

    标签: perl


    【解决方案1】:

    不要使用as_string 的结果来获取cookie 值。这通常不适用于电线。查看HTTP::Cookies 中的add_cookie_header 子例程,并注意他们不使用as_string 来找出任何东西。这确实引用了除值之外的所有内容。

    我认为你需要考虑的第一件事是你给HTTP::Cookies 提供了什么。也许变量名中的XML 只是一个坏名字,但数据不是XML。如果你弄乱了 Result.txt 中的数据,你的问题很早就出现了:

    my $resultXML='C:\Docs\Result.txt';
    my $url="https://[mydomain].sharepoint.com/_api/contextinfo";
            
    my $cookie_jar_obj = HTTP::Cookies->new();
    $cookie_jar_obj->load( $resultXML );
    

    【讨论】:

    • 感谢布赖恩的回复。但是我没有使用 as_string 的结果。在我从上面代码中的最后一个打印语句中得到错误后,我只是打印它以查看它的外观。就在那时我注意到了额外的双引号,并认为这就是我的脚本没有连接到网站的原因。我得出的结论是,从我的文件中添加 cookie 时出现问题,但我不知道要改用什么。我来看看 add_cookie_header 子程序
    • 您说“如果我再次复制并粘贴此信息,从“rtFA=”部分开始到“高级 REST 客户端”chrome 扩展中”。听起来你肯定在使用as_string 的结果。
    • 是的,但只是在 chrome 扩展中。我将扩展程序用于检查目的只是为了尝试找出我的 Perl 脚本没有连接到网站的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2020-01-11
    • 2021-02-02
    • 2011-06-27
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多