প্রাথমিক অনুমোদন থাকলে কীভাবে নোড.জেজে http.client ব্যবহার করবেন


105

শিরোনাম অনুসারে, আমি কীভাবে এটি করব?

আমার কোডটি এখানে:

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);
  });
});

12
http.createClient হ্রাস করা হয়। পরিবর্তে 'http.request' ব্যবহার করুন।
থোমাস-পিটার

উত্তর:


271

আপনাকে Authorizationশিরোনামে ক্ষেত্রটি সেট করতে হবে ।

এটিতে Basicএই ক্ষেত্রে প্রমাণীকরণের ধরণ এবং username:passwordসংমিশ্রণটি বেস 64 এ এনকোড হয়ে থাকে:

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);

4
পুরো জিনিসটি ঠিক এভাবেই কাজ করে। সার্ভারটি বেস 64 এ ডেটা এনকোড হওয়ার প্রত্যাশা করে।
আইভো ওয়েটজেল

3
এই উদাহরণে 'ক্লায়েন্ট' কী?
স্টিভেন সরোকা

1
ওহ .. এটি প্রশ্নে আছে। duh। NM।
স্টিভেন সোরোকা

বাহ এত বড়, সত্যিই আমাকে সাহায্য!
ক্রিস অ্যালিনসন

61

নোড.জেএসএস থেকে http.request API ডক্স আপনি এর মতো কিছু ব্যবহার করতে পারেন

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();

8
এটি আধুনিক সময়ের উত্তর।
ডেভিড জোন্স

2
আপনার কি "ব্যবহারকারী: পাসওয়ার্ড" বা "বেসিক ব্যবহারকারী: পাসওয়ার্ড" করতে হবে?
কেটি

2
@ কেভর না আপনার এটি বেসিকের সাথে উপসর্গ করার দরকার নেই।
সুজয়

@ মার্সেলোফিলহো এটিই আমি ডক্সগুলিতে এখনও দেখতে পাই <স্ট্রিং> বেসিক প্রমাণীকরণ অর্থাৎ 'ব্যবহারকারী: পাসওয়ার্ড' একটি অনুমোদনের শিরোনাম গণনা করার জন্য।
সুজয়

15
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);
  } );

1
সুরক্ষা এবং ব্যবহারযোগ্যতার সমস্যার কারণে বাফার () অবমূল্যায়িত হয়েছে। পরিবর্তে বাফার.অলোক (), বাফার.এলোকউনসেফ (), বা বাফার.ফ্রোম () পদ্ধতিগুলি ব্যবহার করুন
সৌরভ

13

ব্যবহারকারীকে ব্যবহার করা একটি সহজ সমাধান: সরাসরি ইউআরএলে @ হোস্ট ফর্ম্যাটটি পাস করুন।

অনুরোধ লাইব্রেরি ব্যবহার করে :

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
    }
);

আমি এই সম্পর্কে একটি সামান্য ব্লগপোস্ট লিখেছি ।


18
এটি আদর্শ পরামর্শ নয়: ক্লায়েন্ট বা সার্ভার পক্ষের যে কোনও একটিতে ইউআরএল লগ করা পাসওয়ার্ডের মানগুলি প্রকাশ করতে পারে - এটি একটি বহুল পরিচিত সুরক্ষিত আক্রমণ আক্রমণকারী ct আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি যে কেউ এটি না করে। শিরোনাম মানগুলি আরও ভাল, এবং বেসিক প্রমাণীকরণ ব্যবহার না করা - ডাইজেস্ট প্রমাণীকরণের পক্ষে বা OAuth 1.0a (উদাহরণস্বরূপ) আরও ভাল। সনাক্তকরণের এই ফর্মটি ইউআরআইতে আরএফসি 3986
লেস হ্যাজলউড

বেসিক এথ ব্যবহার না করা কিছু খারাপ পরামর্শ বলে মনে হচ্ছে। বেসিক লেখার জন্য পরিবহন সুরক্ষা প্রয়োজন বা এটি সম্পূর্ণরূপে নিরাপত্তাহীন, হ্যাঁ। তবে পরিবহন সুরক্ষার সাথে বুনিয়াদি প্রমাণ হ'ল ডাইজেস্ট প্রমাণীকরণ। এবং OAuth 1 সম্পূর্ণ অर्थোগোনাল সুরক্ষা সমস্যাযুক্ত একটি সম্পূর্ণ ভিন্ন প্রাণী different
সমৃদ্ধ পুনরায়

@ লেজহাজলউড আপোষযুক্ত ক্লায়েন্টরা পাসওয়ার্ড ফাঁস করতে পারে তা বলা ঠিক হবে না। আপোষযুক্ত ক্লায়েন্টের সহজ অর্থ সমস্ত বেট বন্ধ রয়েছে। যাইহোক, আপনার অবচয় সতর্কতা ন্যায্য।
নুরেটিন

10

ওএসএক্সে আমি নোড.জেএস ০..6..7 ব্যবহার করছি এবং আমি 'অনুমোদন' পেতে পারি না: আমাদের প্রক্সিটির সাথে কাজ করার জন্য এটি 'প্রক্সি-অনুমোদন' এ সেট করা দরকার: লেখক আমার পরীক্ষার কোডটি :

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);
});

3
ভবিষ্যতের পাঠকদের উন্নয়নের জন্য: আপনি গন্তব্য ওয়েবসার্ভার (গুগল) এর সাথে প্রমাণীকরণের পরিবর্তে আপনার প্রক্সি সার্ভারের সাথে প্রমাণীকরণের কারণ এটি। যদি আপনার গন্তব্য সার্ভারের সাথে প্রমাণীকরণের প্রয়োজন হয় তবে অনুমোদন শিরোনামটি আপনি ব্যবহার করতে চান be
মাকস

হ্যাঁ তবে প্রায়শই আপনার উভয়েরই দরকার হয় তাই এটি একটি শক্ত উত্তর
মন্ড রেমন্ড

সুরক্ষা এবং ব্যবহারযোগ্যতার সমস্যার কারণে বাফার () অবমূল্যায়িত হয়েছে। পরিবর্তে বাফার.অলোক (), বাফার.এলোকউনসেফ (), বা বাফার.ফ্রোম () পদ্ধতিগুলি ব্যবহার করুন
সৌরভ

6
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);
    });
});

2

আমি সম্প্রতি এই জুড়ে এসেছি। প্রক্সি-অনুমোদন এবং অনুমোদনের শিরোনামগুলির মধ্যে কোনটি ক্লায়েন্টের সাথে কথা বলছে তার সার্ভারের উপর নির্ভর করে। যদি এটি কোনও ওয়েবসভার হয় তবে আপনাকে অনুমোদন সেট করতে হবে এবং এটি যদি প্রক্সি হয় তবে আপনাকে প্রক্সি-অনুমোদনের শিরোনাম সেট করতে হবে


1

এই কোডটি আমার গবেষণার পরে অনেক ক্ষেত্রে কাজ করে। আপনাকে এনপিএম প্যাকেজ অনুরোধটি ইনস্টল করতে হবে ।

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);      

    });    
}

সুরক্ষা এবং ব্যবহারযোগ্যতার সমস্যার কারণে বাফার () অবমূল্যায়িত হয়েছে। পরিবর্তে বাফার.অলোক (), বাফার.এলোকউনসেফ (), বা বাফার.ফ্রোম () পদ্ধতিগুলি ব্যবহার করুন
সৌরভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.