PhantomJS将发布数据发送到RESTful API并操纵JSON

时间:2016-02-10 19:21:45

标签: json phantomjs restful-url

使用PhantomJS 2.1.1我想验证用户并获取受保护数据列表;到目前为止,我没有成功采用这种方法。这里的任何人都可以看看并指出我正确的方向。谢谢。 我想要做的是从后端获取JSON并在此处使用Phantom进行测试,作为构建过程的一部分。

use strict
var AUTH_ENDPOINT = 'http://192.168.1.251';
var SERV_ENDPOINT = 'http://192.168.1.250';
var returnedData = '';

var page = require('webpage').create(),
    server = AUTH_ENDPOINT + '/services/users/login',
    settings = {
        operation: "POST",
        headers: {
           "Content-Type": "application/json"
        },
        data: JSON.stringify({'user':'myusername', 'pword':'123456789'})
    };

page.onResourceRequested = function(requestData, networkRequest) {
    console.log('Request (#' + requestData.id + '): ');
    console.log(JSON.stringify(requestData));
};

page.onResourceReceived = function(response) {
    console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};

page.onLoadFinished = function(status) {
  console.log('Status: ' + status);
  // Do other things here...
};
page.onResourceError = function(resourceError) {
  console.log('Unable to load resource (#' + resourceError.id + 'URL:' + resourceError.url + ')');
  console.log('Error code: ' + resourceError.errorCode + '. Description: ' + resourceError.errorString);
};

page.open(server, settings, function(status) {
  console.log('Status: ' + status);
  // when successful the response from server is a JSON
  // like so '{"authtoken":"23423","user":"myname"}'
  returnedData = JSON.parse(page.plainText);
  // this should be my token
  console.log(returnedData.authtoken);
});

// now use this token on this url
var server = SERV_ENDPOINT + '/services/get/list?data=cars';
var settings = {
    operation: "GET",
    encoding: "utf8",
    headers: {
       "token": returnedData.authtoken
    }
};

page.open(server, settings, function(status) {
    console.log(status);
    if (status !== 'success') {
        console.log('Unable to get!');
    } else {
        var jsonSource = page.plainText;
        var resultObject = JSON.parse(jsonSource);
        // all of the user cars here!!
        console.log(resultObject);
    }
    // then finally close
    phantom.exit();
});

所以这就是我所拥有的,它不起作用,输出就在这里

Request #1:
{"headers":
[
  {
    "name":"Accept",
    "value":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  },
  {
    "name":"Origin",
    "value":"null"
  },
  {
    "name":"User-Agent",
    "value":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1"
  },
  {
    "name":"Content-Type",
    "value":"application/json"
  },
  {
    "name":"Content-Length",
    "value":"54"
  }
],
"id":1,
"method":"POST",
"postData":"{\"user\":\"myusername\",\"pword\":\"123456789\"}",
"time":"2016-02-10T18:32:36.007Z",
"url":"http://192.168.1.251/services/users/login"}
Unable to load resource (#1URL:http://192.168.1.251/services/users/login)
Error code: 5. Description: Operation canceled 
Response (#1, stage "end"): {"contentType":null,"headers":[],"id":1,"redirectURL":null,"stage":"end","status":null,"statusText":null,"time":"2016-02-10T18:32:36.008Z","url":"http://192.168.1.251/services/users/login"}

1 个答案:

答案 0 :(得分:-1)

一个错误可能是" page.plainTex"而不是" page.plainText"这使代码适合我。