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()),也未发现任何可访问附件数据的内容。
既然浏览器可正常下载文件,说明响应中必定存在某种机制能获取文件实际数据,即使它不在响应体中。我想知道:
- 这种机制是什么?浏览器如何从响应中获取数据?
- 能否在PHP中实现该机制获取数据?
内容的提问来源于stack exchange,提问作者Janus Bahs Jacquet
相关产品推荐
相关产品推荐

