关于webmagic下载动态文件(web后台生成的excel)的问题/或者说是如何提取到webmagic的cookie
页面上可以获取到url,直接打开urlconnection的inputstream,avliable()返回值是0.因为后台需要时间生成excel.
但是webmagic可以很好的下载出来,只是在page对象已经包含了下载的内容,只能getRawText(),请问能否基于download或者其他方式获取到inputstream?
已经知道为什么inputstream的avliable()为什么是0,因为访问下载excel的URL后台应该通过cookie或者session来生成excel,自己额外写的是直接返回空白数据.
那么把webmagic抓取的时保留的cookie提取出来应该可行.
但是还是想问,如何获取inputStream...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
有没有包含相应头还真没注意,当时导出的文件是一个Excel.当时直接使用这个流输出到本地就是一个完整的excel了.应该是没有包含相应头的.
这个返回值里如何取得response headers?entity中的inputstream包含了
response headers?对吗
研究了大半天 我自己说说吧
我在默认的下载器HttpClientDownloader里找到了Page的生成代码
其中有
String content=getContent(charset,httpResponse);
Page page=new Page();
page.setRawText(content);
跟进getContent
发现其中逻辑是将InputStream转成byte[]后再转成String
byte[] contentBytes=IOUtils.toByteArray(httpResponse.getEntity().getContent());
return new String(contentBytes);
其中编码是从site中提取的编码,但是我使用site中的编码解析出现乱码.
于是我重写了downloader类,然后在获取在获取这个页面的时候临时替换编码,尝试了各种编码
万万没想到IOS-8859-1居然成功解析,大功告成.成功获取到动态文件的InputStream.
但是这样必须重写HttpClientDownloader
希望作者在新版本的时候加入功能,不同的页面可以使用不同的downloader,一个是可能就有些站点页面编码和文件编码有冲突,二个是可以更多的增加灵活性,麻烦作者咯~