如何将文本添加到CasperJS thenOpen()POST请求的主体

时间:2015-10-07 15:24:52

标签: javascript http-post casperjs

我需要在datorama.com中编写一个脚本来访问pardot.com。 Pardot确实有一个API,需要一个请求在正文中有一个请求

POST:https://pi.pardot.com/api/login/version/3
邮件正文:电子邮件=&密码=& user_key =

现在这是我的代码:

phantom.casperPath = casperPath;
phantom.injectJs(casperPath + "/bin/bootstrap.js");

var casper = require('casper').create({
    verbose: true,
    logLevel: 'debug'
});

casper.start().thenOpen('https://pi.pardot.com/api/login/version/3',{ 
    method: 'post',
    content: { 
        'text' : 'email=<myemail>&password=<password>&user_key=<userKey>'
    }
}, function(response) {
     this.echo(this.getHTML());
});

casper.run();

我可以说它正在通过服务器,因为它正在响应this.echo(this.getHTML()); “登录失败” 。我正在使用正确的电子邮件/密码/ user_Key,因为我正在从API控制台提取pardot并且它正在那里工作....所以我认为问题是我没有正确设置请求的正文。

那么有人知道在请求中设置正文的方法吗?

1 个答案:

答案 0 :(得分:1)

casper.open()casper.thenOpen()无法理解content设置。您可能想要使用data

casper.start()
    .thenOpen('https://pi.pardot.com/api/login/version/3', { 
        method: 'post',
        data: 'email=<myemail>&password=<password>&user_key=<userKey>'
    }, function() { ... });

如果您自己构建字符串,请不要忘记在电子邮件,密码和用户密钥参数上使用encodeURIComponent()

您也可以传递一个对象:

casper.start()
    .thenOpen('https://pi.pardot.com/api/login/version/3', { 
        method: 'post',
        data: {
            email: '<myemail>',
            password: '<password>',
            user_key: '<userKey>'
        }
    }, function() { ... });

如果您希望API不是HTML,那么您应该使用casper.getPageContent()代替casper.getHTML()