簡體   English   中英

如何使用 perl 模塊 LWP::UserAgent 指定存儲在文件中的 cookies

[英]How to specify cookies stored in file with perl module LWP::UserAgent

I have the following piece of code that uses cookies collected from another perl program to log into a sharepoint website using the perl module 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()

結果有額外的雙引號字符。 IE

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 錯誤,這正是我在運行代碼的 rest 后得到的

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

陳述。

如何阻止 perl 插入這些額外的雙引號 (") 標記,這些標記似乎正在阻止我的 perl 腳本連接到網站?

不要使用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 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM