在 CasperJS 中跨域下载文件
Download a file cross-domain in CasperJS
我无法使用 CasperJS 从 Web 服务器下载文件流:
- 表单已发布到 url
- url returns 一个文件流
到目前为止,我已验证张贴了正确的表单值。
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 错误 "Unfortunately casperjs cannot make cross domain ajax requests" 后跟 "XMLHttpRequest Exception 101"。搜索后它指出将网络安全变量设置为 false 应该可以使这项工作......但事实并非如此。还有什么我应该调查的吗?
casperjs - v1.1.1
phantomjs - v2.0.0
原来我的代码没有问题,只需将 PhantomJS 从 2.0.0 更新到 2.1.1 就解决了这个问题。
备选答案:您可以通过您站点的 API 界面实施代理。警告:最好只使用您控制的资源,因为它要求您的站点对内容负责,并且如果您允许恶意软件或不安全的内容,可能会危及您的证书。
那里写了很多 AJAX cross-domain 和 same-origin 安全策略 material,看一看。据我所知,John 提出的方案(在服务器端设置代理)只有两种方案:
1.使用 W3C CORS 标准技术和 HTTP headers.
https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
2。 JSONP机制.
https://en.wikipedia.org/wiki/JSONP
我真的不知道这是不是你遇到的真正问题,但我希望这对你有很好的帮助。
我无法使用 CasperJS 从 Web 服务器下载文件流:
- 表单已发布到 url
- url returns 一个文件流
到目前为止,我已验证张贴了正确的表单值。
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 错误 "Unfortunately casperjs cannot make cross domain ajax requests" 后跟 "XMLHttpRequest Exception 101"。搜索后它指出将网络安全变量设置为 false 应该可以使这项工作......但事实并非如此。还有什么我应该调查的吗?
casperjs - v1.1.1 phantomjs - v2.0.0
原来我的代码没有问题,只需将 PhantomJS 从 2.0.0 更新到 2.1.1 就解决了这个问题。
备选答案:您可以通过您站点的 API 界面实施代理。警告:最好只使用您控制的资源,因为它要求您的站点对内容负责,并且如果您允许恶意软件或不安全的内容,可能会危及您的证书。
那里写了很多 AJAX cross-domain 和 same-origin 安全策略 material,看一看。据我所知,John 提出的方案(在服务器端设置代理)只有两种方案:
1.使用 W3C CORS 标准技术和 HTTP headers.
https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
2。 JSONP机制.
https://en.wikipedia.org/wiki/JSONP
我真的不知道这是不是你遇到的真正问题,但我希望这对你有很好的帮助。