You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel获取HTTP返回的Excel附件失败,浏览器可正常下载求助

问题详情

本质上这和去年的一个未解决问题相同,但针对PHP(具体为Laravel)场景。

我有一个外部URL,访问它应返回Excel文件。在浏览器中打开该URL可正常下载内容正确的文件(约270KB),但通过HTTP请求获取文件内容时却无法成功。

我优先希望使用Laravel HTTP客户端解决,也接受cURL甚至file_get_contents的方案。

通过Insomnia或Postman发送请求时,得到的请求/响应信息如下:

> GET /path/to/file.do?file=xyz.xls HTTP/1.1
> Host: remote.host.example.com
> User-Agent: insomnia/2023.4.0
> Authorization: Basic [redacted]
> Accept: */*

* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Mark bundle as not supporting multiuse

< HTTP/1.1 200 OK
< Date: Fri, 08 Sep 2023 10:56:07 GMT
< Server: Apache

* TLSv1.2 (IN), TLS header, Supplemental data (23):

< Content-Disposition: attachment; filename =xyz.xls                                                                                                                                                                                                 
< Set-Cookie: RPGSPSESSIONID=[redacted];
< Transfer-Encoding: chunked
< Content-Type: application/xls

* TLSv1.2 (IN), TLS header, Supplemental data (23):
* Received 5 B chunk

响应包含content-disposition: attachment; filename=xyz.xls头,但完全没有Content-Length头,且响应体为空。

使用Laravel HTTP客户端调用时,以下代码返回空字符串:

Http::withBasicAuth('un', 'pw')
  ->get('https://remote.host.example.com/path/to/file.do?file=xyz.xls')
  ->body();

检查该调用返回的HTTPResponse对象(不调用->body()),也未发现任何可访问附件数据的内容。

既然浏览器可正常下载文件,说明响应中必定存在某种机制能获取文件实际数据,即使它不在响应体中。我想知道:

  1. 这种机制是什么?浏览器如何从响应中获取数据?
  2. 能否在PHP中实现该机制获取数据?

内容的提问来源于stack exchange,提问作者Janus Bahs Jacquet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:33:21