Perl 在Google驱动器文档上使用LWP::UserAgent的内容处置

Perl 在Google驱动器文档上使用LWP::UserAgent的内容处置,perl,http-headers,wget,lwp,content-disposition,Perl,Http Headers,Wget,Lwp,Content Disposition,我正在尝试使用从服务器收到的实际文件名保存Google Drive共享文件(内容处置): 我试图分析标题: use strict; use warnings; use Data::Dumper; use LWP::UserAgent qw( ); my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing'; $str =~ /file\/d\/(\w+)/; my $url =

我正在尝试使用从服务器收到的实际文件名保存Google Drive共享文件(内容处置):

我试图分析标题:

use strict;
use warnings;
use Data::Dumper;
use LWP::UserAgent qw( );
my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing';
$str =~ /file\/d\/(\w+)/;
my $url = 'https://drive.google.com/uc?export=download&id='.$1;
my $ua = LWP::UserAgent->new();
my $response = $ua->head($url)->{'_headers'};
print Dumper( $response );
我明白了:

$VAR1 = bless( {
'client-ssl-cert-subject' => '/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleusercontent.com',
'connection' => 'close',
'date' => 'Mon, 19 Oct 2015 14:45:45 GMT',
'content-type' => 'text/html; charset=UTF-8',
'x-guploader-uploadid' => 'AEnB2UrQJIoJUIIhWnKz9HAlW_2XKApLe_0IDMZjS0gGQOMdRaF68Od2xsxssp7mBdQP9kNrjvDueWUP5pSa1eHbprSjbPvfbA',
'alternate-protocol' => '443:quic,p=1',
'expires' => 'Mon, 19 Oct 2015 14:45:45 GMT',
'::std_case' => {
   'client-ssl-socket-class' => 'Client-SSL-Socket-Class',
   'client-ssl-cert-subject' => 'Client-SSL-Cert-Subject',
   'client-ssl-cipher' => 'Client-SSL-Cipher',
   'client-peer' => 'Client-Peer',
   'x-guploader-uploadid' => 'X-GUploader-UploadID',
   'alternate-protocol' => 'Alternate-Protocol',
   'alt-svc' => 'Alt-Svc',
   'client-ssl-cert-issuer' => 'Client-SSL-Cert-Issuer',
   'client-date' => 'Client-Date',
   'client-response-num' => 'Client-Response-Num'
 },
'client-ssl-cert-issuer' => '/C=US/O=Google Inc/CN=Google Internet Authority G2',
'server' => 'UploadServer',
'client-date' => 'Mon, 19 Oct 2015 14:45:55 GMT',
'client-ssl-socket-class' => 'IO::Socket::SSL',
'client-ssl-cipher' => 'ECDHE-ECDSA-AES128-GCM-SHA256',
'client-peer' => '2a00:1450:400c:c08::84:443',
'alt-svc' => 'quic=":443"; p="1"; ma=604800',
'cache-control' => 'private, max-age=0',
'client-response-num' => 1
}, 'HTTP::Headers' );
我希望在上面的列表中找到内容处置标题。 另一方面,wget正确地给出了文件名:

#wget--内容配置”https://drive.google.com/uc?export=download&id=0B6vqTWO9kmdmdzk5ejhDSXgzMDg"
--2015-10-19 20:21:37--  https://drive.google.com/uc?export=download&id=0B6vqTWO9kmdmdzk5ejhDSXgzMDg
正在解析drive.google.com(drive.google.com)。。。2a00:1450:400c:c04::64、74.125.206.139、74.125.206.101。。。
正在连接到drive.google.com(drive.google.com)| 2a00:1450:400c:c04::64 |:443。。。有联系的。
HTTP请求已发送,正在等待响应。。。302临时搬家
地点:https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6vqTWO9kmdmdzk5ejhDSXgzMDg?e=下载[如下]
警告:HTTP中不支持通配符。
--2015-10-19 20:21:37--  https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6VQTWO9KMDZK5EJHDSXGZMDG?e=下载
解析doc-0s-2s-docs.googleusercontent.com(doc-0s-2s-docs.googleusercontent.com)。。。2a00:1450:400c:c08::8474.125.140.132
正在连接到doc-0s-2s-docs.googleusercontent.com(doc-0s-2s-docs.googleusercontent.com)| 2a00:1450:400c:c08::84 |:443。。。有联系的。
HTTP请求已发送,正在等待响应。。。200行
长度:16[文本/纯文本]
保存到:“testdoc.txtdestdoc.txt”
testdoc.txttestdoc.txt 100%[===============================================================================================================================================================================================================================================================================================================================================================]16-KB-0秒
2015-10-19 20:21:38(550 KB/s)-“testdoc.txtdestdoc.txt”已保存[16/16]

如何使用perl从服务器获取正确的文件名?

差异的原因如下:

HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6vqTWO9kmdmdzk5ejhDSXgzMDg?e=download [following]

您的初始URL正在被重定向-因此,您获得的标题不是正在下载的文件
wget
。试着从你的头上读取
状态行
,看看你得到了什么

差异的原因是:

HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6vqTWO9kmdmdzk5ejhDSXgzMDg?e=download [following]

您的初始URL正在被重定向-因此,您获得的标题不是正在下载的文件
wget
。试着从你的头上读取
状态行
,看看你得到了什么

差异的原因是:

HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6vqTWO9kmdmdzk5ejhDSXgzMDg?e=download [following]

您的初始URL正在被重定向-因此,您获得的标题不是正在下载的文件
wget
。试着从你的头上读取
状态行
,看看你得到了什么

差异的原因是:

HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://doc-0s-2s-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/unidk5uvfpl9kut1rl3hb5lqcvis8vdq/1445263200000/06380472059566149580/*/0B6vqTWO9kmdmdzk5ejhDSXgzMDg?e=download [following]

您的初始URL正在被重定向-因此,您获得的标题不是正在下载的文件
wget
。试着从你的头上读取
状态行
,看看你得到了什么

不同之处在于,您没有使用wget执行
头部操作。如果查看Perl代码中的响应状态,您将得到

503服务不可用
它可以引用很多东西,但在本例中意味着不支持
HEAD
。将其更改为
GET
,一切正常

use strict;
use warnings;

use feature 'say';

use LWP::UserAgent;

my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing';
die unless $str =~ m{file/d/(\w+)};

my $url = "https://drive.google.com/uc?export=download&id=$1";

my $ua = LWP::UserAgent->new;

my $resp = $ua->get($url);

say $resp->status_line;

say $resp->header('Content-Disposition');
输出
200正常
附件filename=“testdoc.txt”;文件名*=UTF-8''testdoc.txt

不同之处在于,您没有使用wget执行
头部操作。如果查看Perl代码中的响应状态,您将得到

503服务不可用
它可以引用很多东西,但在本例中意味着不支持
HEAD
。将其更改为
GET
,一切正常

use strict;
use warnings;

use feature 'say';

use LWP::UserAgent;

my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing';
die unless $str =~ m{file/d/(\w+)};

my $url = "https://drive.google.com/uc?export=download&id=$1";

my $ua = LWP::UserAgent->new;

my $resp = $ua->get($url);

say $resp->status_line;

say $resp->header('Content-Disposition');
输出
200正常
附件filename=“testdoc.txt”;文件名*=UTF-8''testdoc.txt

不同之处在于,您没有使用wget执行
头部操作。如果查看Perl代码中的响应状态,您将得到

503服务不可用
它可以引用很多东西,但在本例中意味着不支持
HEAD
。将其更改为
GET
,一切正常

use strict;
use warnings;

use feature 'say';

use LWP::UserAgent;

my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing';
die unless $str =~ m{file/d/(\w+)};

my $url = "https://drive.google.com/uc?export=download&id=$1";

my $ua = LWP::UserAgent->new;

my $resp = $ua->get($url);

say $resp->status_line;

say $resp->header('Content-Disposition');
输出
200正常
附件filename=“testdoc.txt”;文件名*=UTF-8''testdoc.txt

不同之处在于,您没有使用wget执行
头部操作。如果查看Perl代码中的响应状态,您将得到

503服务不可用
它可以引用很多东西,但在本例中意味着不支持
HEAD
。将其更改为
GET
,一切正常

use strict;
use warnings;

use feature 'say';

use LWP::UserAgent;

my $str = 'https://drive.google.com/file/d/0B6vqTWO9kmdmdzk5ejhDSXgzMDg/view?usp=sharing';
die unless $str =~ m{file/d/(\w+)};

my $url = "https://drive.google.com/uc?export=download&id=$1";

my $ua = LWP::UserAgent->new;

my $resp = $ua->get($url);

say $resp->status_line;

say $resp->header('Content-Disposition');
输出
200正常
附件filename=“testdoc.txt”;文件名*=UTF-8''testdoc.txt

非直接回答,但您也可以通过非直接回答获得良好的LWP调试信息,但您也可以通过非直接回答获得良好的LWP调试信息,但您也可以通过非直接回答获得良好的LWP调试信息,但您也可以通过