2015-12-02 26 views
3

如何使用帶有使用http-equiv元標記模擬刷新HTTP標頭的Web應用程序下載帶有Zombie.js的文件?如何從Zombie.js流/管道響應對象

實質上,您如何下載/流/管一段時間過去之後加載的可下載資源,而不是通過直接下載鏈接。

我想我可以用Zombie.js管道做...但該文檔是很無謂的zombiejs新手

回答

0

可用於下載二進制文件

var fs = require('fs'); 
var URL = require('url'); 
var Request = require('request'); // Named 'Request' to prevent conflict with zombie's 'request' object 
var Browser = require('zombie'), browser = new Browser(); 

browser.on('request', function (request) { 

    // let's pullover for a download incase we find our request signboard :) 
    if (request.url.indexOf('https://matchingString') == 0) { 

    console.log('Beginning download in a flash...'); 

    var 
    parsedURL = URL.parse(request.url), 
    cookies = browser.cookies, 
    cookieHeader = cookies.serialize(parsedURL.hostname, parsedURL.pathname); 

    if (cookieHeader) request.headers.append('Cookie', cookieHeader); 

    var writeStream = fs.createWriteStream(pathToFileYetToBeWritten); 

    writeStream 
    .on('error', function(err) { 
     console.error(err); 
    }) 
    .on('finish', function() { 
     console.log('finished writing file'); 
    }); 

    Request({ 
     method: request.method, 
     uri: request.url, 
     headers: request.headers.toObject(), 
     proxy: browser.proxy, 
     body: request.body, 
     jar: false, 
     followRedirect: false, 
     strictSSL: browser.strictSSL, 
     localAddress: browser.localAddress || 0 
    }) 
    .on('error', function(err) { 
     console.error(err); 
    }) 
    .pipe(writeStream); 

} 

}); 



browser.visit(url, function() { 

browser.wait(6000); // Wait only if you need to 

}); 
0

不知道這是否會幫助你,但幫我捉響應身體。 (從GitHub issue複製。)

var Promise = require('bluebird'); 
const Browser = require('zombie'); 
const browser = new Browser(); 


browser.visit(myUrl, function() { 
    browser.click('body') 
    .then(function(){ 
     return Promise.map(browser.resources, function(resource){ 
     return (resource.response._bodyUsed) 
      ? resource.response.body 
      : resource.response.text(); 
     }).then(function(bodies){ 
     console.log(bodies); 
     }); 
    }); 
});