【发布时间】:2015-10-12 09:25:04
【问题描述】:
当我使用普通浏览器 (Chrome) 浏览网站 A 时,当我点击网站 A 上的链接时,Chrome 会立即以 CSV 文件的形式下载报告。
当我检查服务器响应标头时,我得到以下结果:
Cache-Control:private,max-age=31536000
Connection:Keep-Alive
Content-Disposition:attachment; filename="report.csv"
Content-Encoding:gzip
Content-Language:de-DE
Content-Type:text/csv; charset=UTF-8
Date:Wed, 22 Jul 2015 12:44:30 GMT
Expires:Thu, 21 Jul 2016 12:44:30 GMT
Keep-Alive:timeout=15, max=75
Pragma:cache
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
现在,我想使用 PhantomJS 下载和解析这个文件。我设置了pageonResourceReceived监听器来查看Phantom是否会接收/下载文件。
clientRequests.phantomPage.onResourceReceived = function(response) {
console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};
当我发出 Phantom 请求下载文件(这是 page.open('URL OF THE FILE'))时,我可以在 Phantom 日志中看到该文件已下载。以下是日志:
"contentType": "text/csv; charset=UTF-8",
"headers": {
"name": "Date",
"value": "Wed, 22 Jul 2015 12:57:41 GMT"
},
"name": "Content-Disposition",
"value": "attachment; filename=\"report.csv\"",
"status":200,"statusText":"OK"
我收到了文件及其内容,但如何访问文件数据?当我打印当前 PhantomJS page 对象时,我得到了页面 A 的 HTML,我不想要那个,我想要 CSV 文件,我需要使用 JavaScript 解析它。
【问题讨论】:
-
Wtf 伙计,如果我告诉我的同事为我的每一篇文章点赞,这几年我在 StackOverflow 和其他网络上的得分将超过 600 分。当我在一小时内看到 3 个赞成票时,我也很惊讶,但这很好也不错。如果你调查这个问题,太多的人面临同样的问题,我想看看是否有人找到了一个好的解决方案。
-
写完评论后,我查看了您的帖子历史记录,发现这里不太可能存在投票欺诈。不过,我仍然觉得奇怪的是,您在不到 10 分钟的时间内在 [phantomjs] 和 [casperjs] 这样的低票标签中获得了 3 个赞成票。可能是因为 [http],但我有点怀疑。
-
关于副本,我抓住了错误的链接,但它仍然包含对您问题的可行答案,但它包含在 CasperJS 代码中。我说的是 PhantomJS fork 的
page.onFileDownload。 -
经过几天和几天的调查,这对于 PhantomJS 来说几乎是不可能的。有一些解决方案,但没有那么优雅。在 CasperJS 上花了 3 个小时后,我做到了,所以 使用 CasperJS 不仅因为这个问题,CasperJS 更直观,更易于使用。
标签: javascript http download phantomjs