在CasperJS中下载跨域文件

时间:2015-11-17 18:00:19

标签: javascript cross-domain casperjs

我无法使用CasperJS从网络服务器下载文件流:

  • 将表单发布到网址
  • url返回文件流

到目前为止,我已经验证了已发布的正确表单值。

var casper = require('casper').create({
    verbose: true, 
    logLevel: 'debug',
    viewportSize: {width: 1440, height: 800},
    pageSettings: {
        userName: '****',
        password: '****',
        webSecurityEnabled: false
    },
    waitTimeout: 200000
});

casper.start("***");

casper.then(function() {
    var exportForm = this.evaluate(function() {
        return $("#export_pdf_form").serialize();
    });

    var exportAction = this.evaluate(function() {
        return $("#export_pdf_form").attr('action');
    });

    var url, file;
    url = '***' + exportAction; (eg. https://webserver/export)
    file = "export.pdf";
    casper.page.settings.webSecurityEnabled = false;
    casper.download(url, fs.workingDirectory + '/' + file, "POST", exportForm);
});

Casper错误"不幸的是,casperjs无法制作跨域ajax请求"其次是" XMLHttpRequest例外101"。在搜索之后,它指出将web安全性变量设置为false应该使其工作......但它没有。还有什么我应该研究的吗?

casperjs - v1.1.1 phantomjs - v2.0.0

3 个答案:

答案 0 :(得分:0)

原来我的代码没有任何问题,只需将PhantomJS从2.0.0更新到2.1.1即可解决问题。

答案 1 :(得分:0)

替代答案:您可以通过您的网站通过API接口实现代理。警告:最好只使用您控制的资源,因为它要求您的网站负责内容,如果您允许恶意软件或不安全的内容,可能会损害您的证书。

答案 2 :(得分:-1)

有很多AJAX跨域和同源安全策略材料写在那里,看一看。据我所知,John提议的那个(在服务器端设置代理)只有两种选择:

<强> 1。使用W3C CORS标准技术和HTTP标头。

https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

<强> 2。 JSONP机制。

https://en.wikipedia.org/wiki/JSONP

我真的不知道这是否是您遇到的真正问题,但我希望这对您有很好的帮助。