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

How to add text to the body of a CasperJS thenOpen() POST request

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

POST: https://pi.pardot.com/api/login/version/3
邮件正文:email=&password=&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()); "Login Failed"。我使用的是正确的 email/password/user_Key,因为我是从 API 的 pardot 控制台中提取它并且它在那里工作....所以我认为问题是我没有正确设置请求的主体.

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

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()