node.js - Node JS 上的应用程序如何访问需要身份验证的第三方站点?

标签 node.js authentication postman cheerio

需要登录第三方服务器并获得授权用户对内容的访问权限。

PhantomJS 不适合。

var request = require('request');
var cheerio = require('cheerio');

var credentials = {
    username: 'user',
    password: 'pass'
};

request.post({
    uri: 'http://mysite.ru/login',
    headers: { 'content–type': 'application/x–www–form–urlencoded' },
    body: require('querystring').stringify(credentials)
}, function(err, res, body){
    if(err) {
        callback.call(null, new Error(' Login failed'));
        return;
    }

    request('http://mysite.ru/all', function(err, res, body) {
        if(err) {
            callback.call(null, new Error('Request failed'));
            return;
        }

        var $ = cheerio.load(body);
        console.log(body);
    });
});

但是输出的 html 代码给出了相同的登录页面。

我不要求编辑我的代码,但也许有人会指出正确的教训?最好与 PostMan - ohm 结合使用(以便能够分析标准浏览器请求并在应用程序的请求中使用它们)

更新!!! 已解决:

var request = require('request');
var cheerio = require('cheerio');
**var request = request.defaults({jar: true})**
var credentials = {
    username: 'user',
    password: 'pass'
};

request.post({
    uri: 'http://mysite.ru/login',
    headers: { 'content-type': 'application/x-www-form-urlencoded' },
      body: require('querystring').stringify(credentials),
        headers: {'user-agent': 'Mozilla/5.0'}
}, function(err, res, body){
    if(err) {
        callback.call(null, new Error(' Login  failed'));
        return;
    }

    request('http://mysite.ru/all', function(err, res, body) {
        if(err) {
            callback.call(null, new Error('Request failed'));
            return;
        }

        var $ =  cheerio .load(body);

        console.log(body);
    });
});

最佳答案

var request = require('request');
var cheerio = require('cheerio');
**var request = request.defaults({jar: true})**
var credentials = {
    username: 'user',
    password: 'pass'
};

request.post({
    uri: 'http://mysite.ru/login',
    headers: { 'content-type': 'application/x-www-form-urlencoded' },
      body: require('querystring').stringify(credentials),
        headers: {'user-agent': 'Mozilla/5.0'}
}, function(err, res, body){
    if(err) {
        callback.call(null, new Error(' Login  failed'));
        return;
    }

    request('http://mysite.ru/all', function(err, res, body) {
        if(err) {
            callback.call(null, new Error('Request failed'));
            return;
        }

        var $ =  cheerio.load(body);

        console.log(body);
    });
});

关于node.js - Node JS 上的应用程序如何访问需要身份验证的第三方站点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079868/

相关文章:

node.js - postman 发布请求无法读取未定义的属性

node.js - 如何每小时在AWS上运行Node.js项目?

javascript - 在javascript中延迟后获取网站内容

android - 为 Android 上的 Google+ 重新生成 "one time authorization code"

c# - 使用数据库而不是内存存储身份服务器 4

android - 即使我在 firebase 控制台中更新了 sha1,在 play 商店中发布 .apk 后,firebase 电话身份验证也不起作用

postman - 如何修复 - 更新 plannertaskdetails - If-Match header 包含无效值

json - 通过 Postman 以 JSON 格式发送时间戳

javascript - 向 twitter api 发出 Oauth2 请求

javascript - 如何将 ValidationPipe() 和 ParseIntPipe() 应用于参数?