Perl 为什么Mojo::Message::Response返回空的正文?

Perl 为什么Mojo::Message::Response返回空的正文?,perl,http,mojolicious,Perl,Http,Mojolicious,我试图使用$res->body访问Mojo::Message::Response对象的主体,但得到一个空字符串 如果我做了$res->to_string我会得到以下结果 HTTP/1.1 200 OK Client-SSL-Cert-Subject: /C=DE/ST=Bayern/L=xxxxx/O=xxxx/CN=oa.xxxxx.com X-BEServer: DEHEREMEX52 Client-SSL-Cipher: ECDHE-RSA-AES256-SHA Client-SSL-Ce

我试图使用
$res->body
访问
Mojo::Message::Response
对象的主体,但得到一个空字符串

如果我做了
$res->to_string
我会得到以下结果

HTTP/1.1 200 OK
Client-SSL-Cert-Subject: /C=DE/ST=Bayern/L=xxxxx/O=xxxx/CN=oa.xxxxx.com
X-BEServer: DEHEREMEX52
Client-SSL-Cipher: ECDHE-RSA-AES256-SHA
Client-SSL-Cert-Issuer: /C=US/O=Blah, Inc./OU=See www.blah.net/legal-terms/OU=(c) 2012 Blah, Inc. - for authorized use only/CN=Blah Certification Authority - L1K
Persistent-Auth: true
X-CalculatedBETarget: blah.blah.blah.biz
Client-Date: Thu, 13 Jul 2017 05:50:47 GMT
Client-Response-Num: 3
Date: Thu, 13 Jul 2017 05:50:47 GMT
Server: Microsoft-IIS/8.5
Client-SSL-Warning: Peer certificate not verified
X-DiagInfo: DEHEREMEX52
Set-Cookie: ClientId=PZCOBXREXHBNPYAIEA; expires=Fri, 13-Jul-2018 05:50:48 GMT; path=/; HttpOnly
Set-Cookie: exchangecookie=565bea08845b4a9fb053ac5e7e60e16e; expires=Fri, 13-Jul-2018 05:50:47 GMT; path=/; HttpOnly
Set-Cookie: X-BackEndCookie=S-1-5-21-1409082233-362288127-725345543-9215=u56Lnp2ejJqByp3MyMvMmsbSmc3Jx9LLnsid0sfImZvSx8qZns/Omp7Nyc3PgYHNz87I0s/H0s7Nq8/KxcrPxcvH; expires=Sat, 12-Aug-2017 05:50:48 GMT; path=/ews; secure; HttpOnly
X-FEServer: BLAHBLAX
Content-Length: 0
Client-Transfer-Encoding: chunked
X-AspNet-Version: 4.0.30319
Request-Id: ea3453f9-83b0-42fa-88a0-3d16ac35a6a6
Client-Peer: 87.237.216.20:443
Cache-Control: private
Connection: Keep-Alive
X-Powered-By: ASP.NET
Content-Type: text/xml; charset=utf-8
Client-SSL-Socket-Class: IO::Socket::SSL
如果我做了
print dump$res->content
,我会得到以下内容(为了清晰起见省略了部分),我想要的内容在
缓冲区中清晰可见:

do {
  my $a = bless({
    asset           => bless({ auto_upgrade => 1, start_range => 0 }, "Mojo::Asset::Memory"),
    auto_decompress => 1,
    auto_relax      => 1,
    auto_upgrade    => 1,
    body            => 2,
    buffer          => "the content I want is here and there is a lot of it",
    events          => { read => [sub { ... }] },
    ...
    header_size     => 1363,
    headers         => bless({
    ...
    }, "Mojo::Headers"),
    pre_buffer      => "",
    raw_size        => 3973,
    read            => 'fix',
    real_size       => 2610,
    size            => 0,
    state           => "finished",
  }, "Mojo::Content::Single");
  $a->{read} = $a->{events}{read}[0];
  $a;
}
但是,
$res->body
返回一个空字符串。我怀疑这与
大小
真实大小
和被分块的内容有关,但这是什么呢

curl-v执行相同操作将返回以下标题:

HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Date: Fri, 14 Jul 2017 06:04:11 GMT
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
Cache-Control: private
request-id: ac058f09-a121-4d27-bbdf-ea7505e1ff33
Set-Cookie: ClientId=FLKNCOOKUWTCVQKSQTZQ; expires=Sat, 14-Jul-2018 06:04:12 GMT; path=/; HttpOnly
X-CalculatedBETarget: cihiuz.blah.xxx.biz
X-DiagInfo: XXXXXXXXXXX
X-BEServer: XXXXXXXXXXX
X-AspNet-Version: 4.0.30319
Set-Cookie: exchangecookie=f5013e861b6949539169122ab1af6046; expires=Sat, 14-Jul-2018 06:04:12 GMT; path=/; HttpOnly
Set-Cookie: X-BackEndCookie=S-1-5-21-1409082233-362288127-725345543-9215=u56Lnp2ejJqByp3MyMvMmsbSmc3Jx9LLnsid0sfImZvSx8qZns/Omp7Nyc3PgYHNz87I0s/H0s7Mq8/Jxc/Lxc7N; expires=Sun, 13-Aug-2017 06:04:12 GMT; path=/ews; secure; HttpOnly
Persistent-Auth: true
X-Powered-By: ASP.NET
X-FEServer: XXXXXXXXXXX
已添加


我发现我可以通过
$res->content->lefts>访问内容,这是正确的方法吗?

这看起来更像是访问一个错误的服务器,它没有正确实现HTTP。剩余数据是服务器在正确的HTTP响应完成后发送的数据。如果你提供URL,你可能会看到那里到底发生了什么。@SteffenUllrich-对不起,我不能提供URL。公司服务器、机密性等。这是一个Exchange Web服务—以防有所帮助。有没有解决这个问题的建议?LWP::UserAgent似乎可以使用,但我只想在应用程序中使用Mojo::UserAgent。您能否提供完整的原始响应头,可能是使用
curl-v
?你展示的那个已经被魔咒改变了。另外,您使用的是哪个版本的Mojolicious?@SteffenUllrich-I添加了
curl-v
标题;我使用的是7.10,升级到7.36会得到相同的结果这些头中没有奇怪的东西,所以它一定是响应体中的某个东西,或者服务器对来自Mojo的请求的反应不同。至少,如果不访问原始HTTP通信(即,在SSL解包之后,但在HTTP客户端进行任何处理之前)来重现问题,我无法找出问题的原因。没有这一点,我也找不到解决办法。