在表单提交中发送HTTP标头CasperJS

WHO

我对CasperJS进行了以下测试:

this.fillSelectors("#registration-form", {
    "#first-name": "Bob",
    "#last-name": "Smith",
    "#email-address": RANDOM_EMAIL,
    "#password": PASSWORD,
    "#password-confirm": PASSWORD
}, true);

我希望能够与此一起发送HTTP标头。如果没有“手动”发布表单,我似乎找不到找到这种方法的方式,这不是我想要的测试。

Artjom B.

有一种比下面的方法更简单的方法。您可以访问casper.page.customHeadersPhantomJS的Webpage实例属性。

casper.then(function() {
    casper.page.customHeaders = {
        "CuStOm": "Header"
    }; // set headers
    this.fillSelectors("#registration-form", { /*...*/ }, true);
});

casper.then(function() {
    casper.page.customHeaders = {}; // reset headers
});

问题在于,此方法会将您的自定义标头添加到每个请求,直到再次禁用它为止。您可以尝试基于setTimeout或直接在后面重置标题fillSelectors


无法在浏览器中设置表单提交的标题__utils__.sendAJAX也没有提供自定义标头。

您将需要使用XMLHttpRequest发送请求。以下函数替换表单的提交处理程序以发送Ajax调用并等待:

casper.thenFormToXHR = function(formSelector, data, customHeaders){
    this.thenEvaluate(function(formSelector, customHeaders){
        // see https://stackoverflow.com/a/19838177/1816580
        function submitForm(oFormElement) {
            window.__requestDone = false;
            var xhr = new XMLHttpRequest();
            for(var header in customHeaders) {
                xhr.setRequestHeader(header, customHeaders[header]);
            }
            xhr.onload = function(){
                window.__requestDone = true;
            };
            xhr.open (oFormElement.method, oFormElement.action, true);
            xhr.send (new FormData(oFormElement));
            return false;
        }
        document.querySelector(formSelector).onsubmit = submitForm;
    }, formSelector, customHeaders);
    this.then(function(){
        this.fillSelectors(formSelector, data, true);
    });
    this.waitFor(function check(){
        return this.evaluate(function(){
            return window.__requestDone;
        });
    });
};

然后可以像这样调用:

casper.thenFormToXHR("#registration-form", {
    "#first-name": "Bob",
    "#last-name": "Smith",
    "#email-address": RANDOM_EMAIL,
    "#password": PASSWORD,
    "#password-confirm": PASSWORD
}, {
    "X-Requested-With": "XMLHttpRequest" // here should be your custom headers
});

如果您不需要等待XHR完成,则可以减少代码:

casper.formToXHR = function(formSelector, data, customHeaders){
    this.evaluate(function(formSelector, customHeaders){
        // see https://stackoverflow.com/a/19838177/1816580
        function submitForm(oFormElement) {
            var xhr = new XMLHttpRequest();
            for(var header in customHeaders) {
                xhr.setRequestHeader(header, customHeaders[header]);
            }
            xhr.open (oFormElement.method, oFormElement.action, true);
            xhr.send (new FormData(oFormElement));
            return false;
        }
        document.querySelector(formSelector).onsubmit = submitForm;
    }, formSelector, customHeaders);
    this.fillSelectors(formSelector, data, true);
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Golang中发送接收HTTP标头

来自分类Dev

在Golang中发送接收HTTP标头

来自分类Dev

从Orbeon XForm提交发送HTTP标头

来自分类Dev

如何在HTTP中发送UpperCase标头

来自分类Dev

如何防止在 Chrome 中发送 Origin HTTP 标头?

来自分类Dev

无法在Minitest中发送请求标头

来自分类Dev

PHP在消息副本中发送标头

来自分类Dev

在 Angular 中发送标头参数

来自分类Dev

PHP发送的HTTP标头

来自分类Dev

您可以添加要在跨域fopen调用中发送的http标头吗?

来自分类Dev

您可以添加要在跨域fopen调用中发送的http标头吗?

来自分类Dev

为什么Google Chrome无法在HTTP请求中发送If-None-Match标头?

来自分类Dev

ajax表单未发送标头

来自分类Dev

在HTTP标头中发送数据并取回

来自分类Dev

我如何获取我实际上在node.js http请求中发送的http请求标头

来自分类Dev

Volley JsonObjectRequest在GET请求中发送标头

来自分类Dev

在Haskell中发送带有标头的GET请求

来自分类Dev

如何使用urllib2在Python中发送标头

来自分类Dev

标头已在php中发送警告。(如何解决?)

来自分类Dev

在 FHIR 请求中发送数据(非标准)标头

来自分类Dev

使用AngularJS发送HTTP标头请求

来自分类Dev

使用AngularJS发送HTTP标头请求

来自分类Dev

如何查看safari发送的http标头?

来自分类Dev

当 HTTP 标头已经发送时?

来自分类Dev

在node.js中发送标头后无法设置标头

来自分类Dev

错误:在循环多个请求中发送标头后无法设置标头

来自分类Dev

表单提交后标头位置未重定向

来自分类Dev

在将pdf提交到Web服务器的同时发送HTTP Basic-Auth标头信息

来自分类Dev

在表单提交中发送电子邮件

Related 相关文章

热门标签

归档