Phantomjs 如何在CasperJS中获得POST请求后的响应

Phantomjs 如何在CasperJS中获得POST请求后的响应,phantomjs,casperjs,Phantomjs,Casperjs,我有一段非常简单的代码,可以在post请求后从服务器端点读取响应。实际上,我正在将数据保存到数据库中,并等待响应,然后再进入下一步 casper.open('http://example.com/ajax.php, { method: 'POST', data: { 'title': '<title>', 'unique_id': '<unique_id>' } }); 我尝试了这些片段,但无法得到响应 caspe

我有一段非常简单的代码,可以在post请求后从服务器端点读取响应。实际上,我正在将数据保存到数据库中,并等待响应,然后再进入下一步

casper.open('http://example.com/ajax.php, {
    method: 'POST',
    data: {
        'title': '<title>',
        'unique_id': '<unique_id>'
    }
});
我尝试了这些片段,但无法得到响应

casper.on('page.resource.received', function(resp){
    this.echo(JSON.stringify(resp, null, 4));
});

casper.on('http.status.200', function(resp){
    this.echo(JSON.stringify(resp, null, 4));
});

casper.on('resource.received', function(resp) {
    this.echo(JSON.stringify(resp, null, 4));
});

如果您想对RESTAPI进行单元测试,CasperJS不一定是正确的工具。 CasperJS允许观察运行网页的web浏览器。
因此,更典型的方法是使用CasperJS加载一个调用REST API的页面,并断言页面行为是正确的(假设该页面根据AJAX调用响应使某些内容可见)。

我在向ElasticSearch发布查询时遇到了同样的问题,但我无法检索结果

据我所知,如果您希望检索脚本回显的数据,解决方案可能是:

this.echo(this.page.content);

在你的职责范围内

例如(我的ElasticSearch案例):

/*
*这里有一些VAR定义
*/
casper.start();
casper.then(函数(){
//下一个var非常特定于ElasticSearch
var elasticQuery=JSON.stringify(
{
“尺寸”:20,
“查询”:{
“已过滤”:{
'过滤器':{'term':{'locked':false}
}
},
'sort':{'lastscraptime':{'order':'asc'}
}
);
var elasticRequest={
方法:“POST”,
数据:elasticQuery
}
这个。然后打开(,弹性请求,函数(响应){
//转储响应头
require('utils').dump(响应);
//回波响应体
this.echo(this.page.content);
//未添加标记的echo响应正文(对JSON有用)
this.echo(this.page.plainText);
}); 
}
);
casper.run();

正如罗伯托指出的那样。您可以使用this.page.content来显示响应。但是您需要在脚本中添加函数(响应)。例如:

casper.open('http://example.com/ajax.php', {
    method: 'POST',
    data: {
        'title': '<title>',
        'unique_id': '<unique_id>'
    }
}, function(response){
    if(response.status == 200){
        require('utils').dump(this.page.content);
    }
});
casper.open('http://example.com/ajax.php', {
方法:“POST”,
数据:{
“标题”:“,
“唯一id”:”
}
},功能(回应){
如果(response.status==200){
require('utils').dump(this.page.content);
}
});

它与REST API无关。我忘了提及,但示例只是使用post方法将一个刮取数据保存到数据库中。但是我无法得到正确的响应来检查它是否成功地与服务器通信。除了检查REST API之外,还有很多原因需要检查CasperJS和PhantomJS中的POST请求。这充其量只是一个无用的评论。CasperJS现在提供函数一段时间。CasperJS现在提供函数一段时间。这是错误的;casper的
open
函数不接受回调参数。
this.echo(this.page.plainText);
/*
 * SOME VAR DEFINITIONS HERE    
 */

casper.start();

casper.then( function() {
    // the next var is very specific to ElasticSearch
    var elasticQuery = JSON.stringify (
      {
        'size' : 20,
        'query' : {
          'filtered' : {
            'filter' : { 'term' : { 'locked' : false } }
          }
        },
        'sort': { 'lastScrapeTime': { 'order': 'asc' } }
      }
    );

    var elasticRequest = {
      method: 'POST',
      data: elasticQuery
    }

    this.thenOpen( <<YOUR URL>>, elasticRequest, function (response) {
      // dump response header
      require('utils').dump(response);

      // echo response body
      this.echo(this.page.content);

      // echo response body with no tags added (useful for JSON)
      this.echo(this.page.plainText);
    }); 
  }
);

casper.run();
casper.open('http://example.com/ajax.php', {
    method: 'POST',
    data: {
        'title': '<title>',
        'unique_id': '<unique_id>'
    }
}, function(response){
    if(response.status == 200){
        require('utils').dump(this.page.content);
    }
});