Node JS 上的应用程序如何访问需要身份验证的第三方站点?
How application on Node JS can go to a third-party site that requires authentication?
需要登录第三方服务器并获得授权用户访问内容的权限。
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);
});
});
需要登录第三方服务器并获得授权用户访问内容的权限。
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);
});
});