使用Node.js连接到PHP网站并保持会话



我正在用Test'em和Mocha(在node.js上运行)做一个测试台,以测试一个PHP网站。

我想要的是请求一些URL(例如http://www.my-website/test.php),并获得http状态码以及返回的内容。

我用node.js Request模块来做。

问题是:

我需要通过身份验证才能访问此页面,否则我将重定向到登录页面。

那么,是否存在一种方法可以通过Node.js登录我的应用程序,并保持会话打开,以便能够在我想要的任何页面上进行链测试?

如果可能的话,我想在登录请求上获得PHPSESSID。你认为这是一个好方向吗?

任何帮助都将非常感激。

谢谢你,祝你有美好的一天。

迈克尔

如果您在选项中设置jar: true或使用您自己的自定义cookie罐,那么request将记住服务器设置的cookie,以便您可以在请求之间保持会话

mscdex感谢您的回答!但不幸的是,它没有为我工作:/

hyubs thanks to you too.

最后我继续使用Mocha + Request。

基本上我所做的是:

  1. 通过POST请求连接到登录页面,并获得在响应头中返回的PHPSESSID cookie

下面是我的代码:
var params = {
    email: 'your_username',
    password: 'your_password'
};
var paramsString = JSON.stringify(params);
// Login to the application
request.post('http://localhost/biings/front-end/rest/auth',
{ 
    headers: {
        "Content-Type" : "application/json",
        'Content-Length' : paramsString.length
    },
    body: paramsString,
},function (error, response, body) {
    // get the PHPSESSID (the last one) that is returned in the header. Sometimes more than one is returned
    var sessionCookie = response.headers['set-cookie'][response.headers['set-cookie'].length - 1];
    sessionCookie = sessionCookie.split(';');
    sessionCookie = sessionCookie[0];
    // Write it in a file (this is a quick trick to access it globally)
    // e.g.: PHPSESSID=ao9a1j0timv9nmuj2ntt363d92 (write it simply as a string)
    fs.writeFile('sessionCookie.txt', sessionCookie, function (err) 
    {
        if(err)
        {
            return console.log(err);
        } 
    });
});
// don't care about this it() function (it's for Mocha)
it("test 1", function(done)
{
    // Get the cookie
    fs.readFile('sessionCookie.txt','utf8', function (err, data) 
    {
        if(err)
        {
             throw err; 
        }
        else
        {
         // Launch a request that includes the cookie in the header
         request.get('http://localhost/biings/front-end/rest/group', 
         {
              headers: {"Cookie" : data},
         }, function (error, response, body) {
             // Check your request reaches the right page
                 expect(response.statusCode).equals(200);
             console.log(body);
                 done();
         });
        }
    }); 
});

这对我来说很有魅力。

告诉我,如果你看到什么错误或可以优化:)

迈克尔

不要使用请求模块,而是使用像PhantomJS和zombie.js这样的无头浏览器。您甚至可以用这些来模拟用户交互。

相关内容

  • 没有找到相关文章

最新更新