繁体   English   中英

无法通过具有https.get和auth参数的nodejs登录到另一台服务器上的页面

[英]Can not login via nodejs with https.get and auth parameter to page on another server

嗨,我正在尝试弄清楚如何使用node js登录网站。 即使我得到200 OK,也没有登录到该页面。 登录通常是通过页面上的表单进行的,但是对于复杂的功能,它应该通过节点运行。 这是我的实际代码,代码有问题吗?

var express = require('express'),
request = require("request"),
https = require('https'),
http = require('http');

var app = express();

app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.use(express.bodyParser());
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'jade');
app.use(app.router);
});





var auth = 'Basic ' + new Buffer("usernameString:passwordString");
var options = require('url').parse( "https://example.com/path" );


options.rejectUnauthorized =false;
options.host="example.com"; 
options.path="https://example.com/usr/login"; 
options.defaultEncoding = 'utf8';
options.headers= { 'content-type' : 'application/x-www-form-urlencoded',
                   "Proxy-Authorization": auth,
                    host: "example.com",'accept-encoding': '*' 
                 };

options.agent = new https.Agent( options );



var req = https.get(  options, function(res) {
console.log(res.statusCode); //200 but not logged in ?!?
 });

更新:

如果我使用AJAX请求测试登录名,则一切正常,但我需要NODE JS:

这是带有ajax的JavaScript代码:

$.ajax{( 
type: get,
…
…
data: "LoginForm[username]=usernameString&LoginForm[password]=passwordString"

…)};

有什么建议么 ?

在大多数情况下,身份验证服务将返回一个cookie,您必须将其包含在以下每个请求中,以便远程服务可以识别您...

据我所知,代理身份验证与基本身份验证的工作原理相同,因为客户端永远不会真正登录 (通过服务器保持的会话),而只是随每个请求一起发送身份验证头。

因此,请尝试为您提出的每个请求发送Proxy-Authorization标头。

编辑 :好的,所以也许您根本不需要使用代理身份验证。 我还注意到您的options.path错误:它应该只包含路径名,而不是完整的URL。

尝试这个:

options.path = "/usr/login?LoginForm[username]=usernameString&LoginForm[password]=passwordString";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM