programing

기본 권한이 있는 경우 Node.js에서 http.client를 사용하는 방법

starjava 2023. 8. 20. 10:09
반응형

기본 권한이 있는 경우 Node.js에서 http.client를 사용하는 방법

제목대로라면, 어떻게 해야 하나요?

내 코드는 다음과 같습니다.

var http = require('http');

// to access this url I need to put basic auth.
var client = http.createClient(80, 'www.example.com');

var request = client.request('GET', '/', {
    'host': 'www.example.com'
});
request.end();
request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

설정해야 합니다.Authorization필드를 입력합니다.

인증 유형이 포함되어 있습니다.Basic이 경우와 그 경우에username:passwordBase64로 인코딩되는 조합:

var username = 'Test';
var password = '123';
var auth = 'Basic ' + Buffer.from(username + ':' + password).toString('base64');
// new Buffer() is deprecated from v6

// auth is: 'Basic VGVzdDoxMjM='

var header = {'Host': 'www.example.com', 'Authorization': auth};
var request = client.request('GET', '/', header);

Node.js http.request API Docs에서 다음과 유사한 것을 사용할 수 있습니다.

var http = require('http');

var request = http.request({'hostname': 'www.example.com',
                            'auth': 'user:password'
                           }, 
                           function (response) {
                             console.log('STATUS: ' + response.statusCode);
                             console.log('HEADERS: ' + JSON.stringify(response.headers));
                             response.setEncoding('utf8');
                             response.on('data', function (chunk) {
                               console.log('BODY: ' + chunk);
                             });
                           });
request.end();
var username = "Ali";
var password = "123";
var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
var request = require('request');
var url = "http://localhost:5647/contact/session/";

request.get( {
    url : url,
    headers : {
        "Authorization" : auth
    }
  }, function(error, response, body) {
      console.log('body : ', body);
  } );

더 쉬운 해결 방법은 URL에서 user:pass@host 형식을 직접 사용하는 것입니다.

요청 라이브러리 사용:

var request = require('request'),
    username = "john",
    password = "1234",
    url = "http://" + username + ":" + password + "@www.example.com";

request(
    {
        url : url
    },
    function (error, response, body) {
        // Do more stuff with 'body' here
    }
);

저는 이것에 대해서도 작은 블로그 글을 썼습니다.

OSX에서 node.js 0.6.7을 사용하고 있는데 'Authorization'을 가져오지 못했습니다. 프록시에서 작동하려면 'Proxy-Authorization'으로 설정해야 했습니다. auth my test code:

var http = require("http");
var auth = 'Basic ' + new Buffer("username:password").toString('base64');
var options = {
    host: 'proxyserver',
    port: 80,
    method:"GET",
    path: 'http://www.google.com',
    headers:{
        "Proxy-Authorization": auth,
        Host: "www.google.com"
    } 
};
http.get(options, function(res) {
    console.log(res);
    res.pipe(process.stdout);
});
var http = require("http");
var url = "http://api.example.com/api/v1/?param1=1&param2=2";

var options = {
    host: "http://api.example.com",
    port: 80,
    method: "GET",
    path: url,//I don't know for some reason i have to use full url as a path
    auth: username + ':' + password
};

http.get(options, function(rs) {
    var result = "";
    rs.on('data', function(data) {
        result += data;
    });
    rs.on('end', function() {
        console.log(result);
    });
});

저는 최근에 이것을 우연히 발견했습니다.설정할 프록시 권한 부여 및 권한 부여 헤더 중 어느 헤더를 설정할지는 클라이언트가 통신 중인 서버에 따라 다릅니다.웹 서버인 경우 권한 부여를 설정하고 프록시인 경우 프록시-권한 부여 헤더를 설정해야 합니다.

이 코드는 많은 연구 끝에 제 경우에 효과가 있습니다.요청한 npm 패키지를 설치해야 합니다.

var url = "http://api.example.com/api/v1/?param1=1&param2=2";
var auth = "Basic " + new Buffer(username + ":" + password).toString("base64");
exports.checkApi = function (req, res) {
    // do the GET request
    request.get({
        url: url,
        headers: {
            "Authorization": auth
        }
    }, function (error, response, body) {
        if(error)
       { console.error("Error while communication with api and ERROR is :  " + error);
       res.send(error);
    }
        console.log('body : ', body);
        res.send(body);      

    });    
}

DNS를 사용하지 않고 더 깊이가 필요한 사용자의 경우 사용할 수도 있습니다.request대신에get간단히 대체함으로써.get와 함께request이와 같이:http.request({ ... })):

http.get({ 
    host: '127.0.0.1',
    port: 443,
    path: '/books?author=spongebob',
    auth: 'user:p@ssword#'
 }, resp => {
    let data;

    resp.on('data', chunk => {
        data += chunk;
    });

    resp.on('end', () => console.log(data));
}).on('error', err => console.log(err));

이는 Node.js에 잘 설명되어 있지 않지만 다음을 사용할 수 있습니다.

require("http").get(
    {
      url: "www.example.com",
      username: "username",
      password: "mysecret",
    },
    (resp) => {
      let data;
      resp.on("data", (chunk) => (data += chunk));
      resp.on("end", () => console.log(data));
    }
  )
  .on("error", (err) => console.log(err));

gotpackage는 http.request의 options 객체를 상속하기 때문에,username그리고.password또한 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/3905126/how-to-use-http-client-in-node-js-if-there-is-basic-authorization

반응형