【问题标题】:Download a file cross-domain in CasperJS在 CasperJS 中跨域下载文件
【发布时间】:2016-02-19 05:36:56
【问题描述】:

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

  • 表单已发布到 url
  • 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 Exception 101”。搜索后,它指出将网络安全变量设置为 false 应该可以使这项工作......但事实并非如此。还有什么我应该研究的吗?

casperjs - v1.1.1 phantomjs - v2.0.0

【问题讨论】:

  • 面对同样的问题,你终于找到解决方法了吗? webSecurityEnabled 也不适合我。
  • @Sam nope 暂时放弃了
  • @Sam 我终于搞定了……只需更新到 PhantomJS 2.1

标签: javascript cross-domain casperjs


【解决方案1】:

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

1.使用 W3C CORS 标准技术和 HTTP 标头。

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

2。 JSONP 机制。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多