HTTP অনুরোধ বস্তু
HTTP অনুরোধ বস্তুটি Node.js দ্বারা অভ্যন্তরীণভাবে তৈরি করা হয় এবং HTTP অনুরোধ করার সময় অনুরোধ ইভেন্ট কলব্যাকের প্রথম প্যারামিটার হিসাবে পাস করা হয়। এটি HTTP সার্ভারের সাথে ব্যবহার করা হলে ক্লায়েন্ট থেকে একটি আগত বার্তা বা HTTP ক্লায়েন্টগুলির সাথে ব্যবহার করার সময় একটি বহির্গামী বার্তা বোঝায়।
Node.js :
http.ClientRequest
বাহ্যিক HTTP অনুরোধ করার সময় তৈরি করা হয়
http.IncomingMessage
ক্লায়েন্ট অনুরোধ পরিচালনা করার সময় সার্ভার দ্বারা প্রাপ্ত
ক্লায়েন্ট রিকোয়েস্ট অবজেক্ট
http.ClientRequest http.request() http.get() Writable Stream instance . HTTP .
একটি ক্লায়েন্ট অনুরোধ তৈরি করা
const http = প্রয়োজন('http'); // একটি ক্লায়েন্ট অনুরোধ তৈরি করুন const req = http.request({ হোস্টনাম: 'example.com', পোর্ট: 80, পথ: '/', পদ্ধতি: 'GET' }, (res) => { // প্রতিক্রিয়া হ্যান্ডেল (আগত বার্তা) console.log(`স্থিতি: ${res.statusCode}`); }); // অনুরোধটি সম্পূর্ণ করুন req.end();
ক্লায়েন্ট অনুরোধ বৈশিষ্ট্য
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| request.aborted | অনুরোধটি পরিত্যাগ করা হয়েছে কিনা তা নির্দেশ করে একটি বুলিয়ান |
| request.connection | মৌলিক সকেট একটি রেফারেন্স |
| request.socket | মৌলিক সকেট একটি রেফারেন্স. অনুরোধ. সংযোগের উপনাম |
| request.finished | অনুরোধ ডেটা সফলভাবে পাঠানো হয়েছে কিনা তা নির্দেশ করে একটি বুলিয়ান |
| request.path | অনুরোধের পথ |
| request.method | অনুরোধের পদ্ধতি (GET, POST, ইত্যাদি) |
| request.host | হোস্ট অনুরোধ |
ক্লায়েন্ট অনুরোধ পদ্ধতি
| পদ্ধতি | ব্যাখ্যা |
|---|---|
| request.abort() | অনুরোধটিকে পরিত্যক্ত হিসাবে চিহ্নিত করে৷ |
| request.destroy([error]) | অনুরোধ সাফ করে। ঐচ্ছিকভাবে একটি প্রেরিত ত্রুটি নির্গত করে |
| request.end([data[, encoding]][, callback]) | অনুরোধ পাঠানো শেষ. যদি শরীরের কোনো অংশ না পাঠানো হয়, তাহলে স্রোতে ফ্লাশ করুন |
| request.flushHeaders() | অনুরোধ শিরোনাম ফ্লাশ করে |
| request.getHeader(name) | একটি হেডারের মান পায় যা সারিতে আছে কিন্তু এখনও পাঠানো হয়নি |
| request.removeHeader(name) | পাঠানোর জন্য সারি থেকে হেডার সরিয়ে দেয় |
| request.setHeader(name, value) | শিরোনাম বস্তুর জন্য একটি অনন্য শিরোনাম মান সেট করে |
| request.setNoDelay([noDelay]) | সকেটের noDelay বিকল্প সেট করে |
| request.setSocketKeepAlive([enable][, initialDelay]) | সকেটের KeepAlive বিকল্প সেট করে |
| request.setTimeout(timeout[, callback]) | অনুরোধের জন্য টাইমআউট মান সেট করে |
| request.write(chunk[, encoding][, callback]) | শরীরের এক খণ্ড পাঠায় |
ক্লায়েন্ট অনুরোধ ইভেন্ট
| ঘটনা | ব্যাখ্যা |
|---|---|
| 'abort' | অনুরোধ পরিত্যাগ করা হলে ইস্যু করা হয় |
| 'connect' | একটি সার্ভার CONNECT পদ্ধতির সাথে একটি অনুরোধে সাড়া দিলে ইস্যু করা হয় |
| 'continue' | সার্ভার একটি '100 Continue' HTTP প্রতিক্রিয়া পাঠালে ইস্যু করা হয় |
| 'information' | সার্ভার 1xx প্রতিক্রিয়া পাঠালে ইস্যু করা হয় (101 আপগ্রেড ছাড়া) |
| 'response' | এই অনুরোধের একটি প্রতিক্রিয়া প্রাপ্ত হলে প্রকাশিত হয়. এই ইভেন্ট শুধুমাত্র একবার প্রকাশিত হবে |
| 'socket' | এই অনুরোধের জন্য একটি সকেট বরাদ্দ করা হলে ইস্যু করা হয় |
| 'timeout' | অনুরোধের সময় শেষ হলে ইস্যু করা হয় |
| 'upgrade' | সার্ভার আপগ্রেডের সাথে সাড়া দিলে ইস্যু করা হয় |
| 'close' | রিকোয়েস্ট বন্ধ হলে রিলিজ হয় |
| 'error' | কোনো ত্রুটি ঘটলে ইস্যু করা হয় |
ইনকামিং মেসেজ অবজেক্ট
http.IncomingMessage HTTP 'request' . , client .
সার্ভারে ইনকামিং মেসেজ অ্যাক্সেস করা হচ্ছে
const http = প্রয়োজন('http'); // HTTP সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // 'req' একটি IncomingMessage অবজেক্ট console.log(${req.url}`-এর জন্য ${req.method} অনুরোধ প্রাপ্ত হয়েছে); res.end('হ্যালো ওয়ার্ল্ড'); }); server.listen(8080);
ইনকামিং মেসেজ বৈশিষ্ট্য
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| message.headers | অনুরোধ/প্রতিক্রিয়া হেডার অবজেক্ট |
| message.httpVersion | ক্লায়েন্টের পাঠানো HTTP সংস্করণ (যেমন, '1.1', '1.0') |
| message.method | একটি স্ট্রিং হিসাবে অনুরোধ পদ্ধতি (শুধুমাত্র অনুরোধ বস্তুর জন্য) |
| message.rawHeaders | প্রাপ্ত হওয়ার সাথে সাথে কাঁচা অনুরোধ/প্রতিক্রিয়া শিরোনামের তালিকা |
| message.rawTrailers | কাঁচা অনুরোধ/প্রতিক্রিয়া ট্রেলার কী এবং মানগুলি প্রাপ্ত হওয়ার সাথে সাথে |
| message.socket | সংযোগের সাথে যুক্ত net.Socket অবজেক্ট |
| message.statusCode | HTTP প্রতিক্রিয়া স্থিতি কোড (শুধুমাত্র প্রতিক্রিয়া বস্তুর জন্য) |
| message.statusMessage | HTTP প্রতিক্রিয়া স্থিতি বার্তা (শুধুমাত্র প্রতিক্রিয়া বস্তুর জন্য) |
| message.trailers | অনুরোধ/প্রতিক্রিয়া ট্রেলার শিরোনাম অর্থ |
| message.url | অনুরোধ URL স্ট্রিং (অনুরোধের বস্তুর জন্য শুধুমাত্র) |
ইনকামিং মেসেজ পদ্ধতি
| পদ্ধতি | ব্যাখ্যা |
|---|---|
| message.destroy([error]) | বার্তাটি মুছে দেয়। ঐচ্ছিকভাবে একটি প্রেরিত ত্রুটি নির্গত করে |
| message.setTimeout(msecs, callback) | সকেটের টাইমআউট মান সেট করে |
একটি মৌলিক GET অনুরোধের উদাহরণ
একটি GET অনুরোধ করতে http.get() ব্যবহার করে একটি মৌলিক উদাহরণ:
const http = প্রয়োজন('http'); // একটি সহজ GET অনুরোধ করুন http.get('http://example.com', (res) => { const { statusCode } = res; const contentType = res.headers['content-type']; console.log(`স্থিতি কোড: ${statusCode}`); console.log(`Content-Type: ${contentType}`); ভুল হতে দাও; যদি (statusCode!== 200) { ত্রুটি = নতুন ত্রুটি (`অনুরোধ ব্যর্থ হয়েছে। স্ট্যাটাস কোড: ${statusCode}`); } অন্যথায় যদি (!/^text\/html/.test(contentType)) { ত্রুটি = নতুন ত্রুটি (`অবৈধ বিষয়বস্তুর প্রকার। প্রত্যাশিত পাঠ্য/html কিন্তু ${contentType}` প্রাপ্ত); } যদি (ত্রুটি) { console.error(error.message); // ফ্রি মেমরিতে প্রতিক্রিয়া ডেটা ব্যবহার করুন res.resume(); প্রত্যাবর্তন } res.setEncoding('utf8'); যাক rawData = ''; // এটি আসার সাথে সাথে প্রতিক্রিয়া ডেটা সংগ্রহ করুন res.on('ডেটা', (খণ্ড) => { rawData += খণ্ড; }); // সম্পূর্ণ প্রতিক্রিয়া প্রক্রিয়া করুন res.on('end', () => { চেষ্টা করুন { console.log(`প্রতিক্রিয়ার দৈর্ঘ্য: ${rawData.length} অক্ষর`); console.log('প্রথম 100টি অক্ষর:'); console.log(rawData.substring(0, 100) + '...'); } ধরা (ই) { console.error(e.message); } }); }).on('error', (e) => { console.error(`ত্রুটি পেয়েছি: ${e.message}`); });
POST অনুরোধের উদাহরণ
ডেটা সহ একটি POST অনুরোধ করা:
const http = প্রয়োজন('http'); // POST অনুরোধ পাঠাতে ডেটা const postData = JSON.stringify({ 'নাম': 'জন ডো', 'ইমেইল': 'john@example.com', 'message': 'Node.js HTTP ক্লায়েন্ট থেকে হ্যালো!' }); // অনুরোধের বিকল্প const বিকল্প = { হোস্টনাম: 'postman-echo.com', পোর্ট: 80, পথ: '/পোস্ট', পদ্ধতি: 'পোস্ট', শিরোনাম: { 'Content-Type': 'application/json', 'সামগ্রী-দৈর্ঘ্য': Buffer.byteLength(পোস্টডেটা) } }; // অনুরোধটি তৈরি করুন const req = http.request(options, (res) => { console.log(`STATUS: ${res.statusCode}`); console.log(`HEADERS: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); let responseData = ''; res.on('ডেটা', (খণ্ড) => { প্রতিক্রিয়া ডেটা += খণ্ড; }); res.on('end', () => { console.log('রেসপন্স বডি:'); চেষ্টা করুন { // JSON-এ পার্স করার চেষ্টা const parsedData = JSON.parse(responseData); console.log(JSON.stringify(parsedData, null, 2)); } ধরা (ই) { // JSON না হলে, পাঠ্য হিসাবে প্রদর্শন করুন console.log(responseData); } }); }); req.on('error', (e) => { console.error(`অনুরোধে সমস্যা: ${e.message}`); }); // অনুরোধের বডিতে ডেটা লিখুন req.write(postData); // অনুরোধটি সম্পূর্ণ করুন req.end();
অনুরোধ শিরোনাম হ্যান্ডলিং
অনুরোধ শিরোনামগুলির সাথে কাজ করা:
const http = প্রয়োজন('http'); // অনুরোধ শিরোনাম যাচাই করতে একটি সার্ভার তৈরি করুন const সার্ভার = http.createServer((req, res) => { // অনুরোধের তথ্য প্রদর্শন করুন console.log(`অনুরোধ গৃহীত হয়েছে: ${req.method} ${req.url}`); console.log(`HTTP সংস্করণ: ${req.httpVersion}`); // স্ট্যাটিক হেডার দেখান console.log('\nস্ট্যান্ডার্ড হেডার:'); const stdHeaders = ['হোস্ট', 'ব্যবহারকারী-এজেন্ট', 'স্বীকার', 'স্বীকার-ভাষা', 'সামগ্রী-প্রকার', 'সামগ্রী-দৈর্ঘ্য']; stdHeaders.forEach(হেডার => { যদি (req.headers[header]) { console.log(`${header}: ${req.headers[header]}`); } }); // কাঁচা শিরোনাম দেখান (নাম-মানের জোড়া) console.log('\nকাঁচা শিরোনাম:'); জন্য (আলো i = 0; i < req.rawHeaders.length; i += 2) { console.log(`${req.rawHeaders[i]}: ${req.rawHeaders[i+1]}`); } // প্রতিক্রিয়া তৈরি করুন res.writeHead(200, {'Content-Type': 'text/html'}); // হেডার তথ্য সহ প্রতিক্রিয়া পাঠান res.end(`
Request Headers
Your Request Headers
${JSON.stringify(req.headers, null, 2)}
`); }); // সার্ভার শুরু করুন const PORT = 8080; server.listen(PORT, () => { console.log(`সার্ভার http://localhost:${PORT}/` এ চলছে); // হেডার প্রমাণ করার জন্য একটি অনুরোধ করুন const req = http.request({ হোস্টনাম: 'স্থানীয় হোস্ট', পোর্ট: পোর্ট, পথ: '/headers-demo', পদ্ধতি: 'GET', শিরোনাম: { 'User-Agent': 'Node.js HTTP ক্লায়েন্ট', 'এক্স-কাস্টম-হেডার': 'কাস্টম মান', 'স্বীকার করুন': 'টেক্সট/এইচটিএমএল, অ্যাপ্লিকেশন/জেসন' } }, (res) => { res.resume(); // প্রতিক্রিয়া ডেটা ব্যবহার করুন }); req.on('error', (e) => { console.error(`ডেমো অনুরোধ ত্রুটি: ${e.message}`); }); req.end(); });
ফাইল আপলোড উদাহরণ
ফাইল আপলোড অনুরোধ ব্যবহার করে:
const http = প্রয়োজন('http'); const fs = প্রয়োজন('fs'); const path = require('path'); // আপলোডের জন্য নমুনা ফাইল তৈরি করুন const sampleFile = path.join(__dirname, 'upload-sample.txt'); fs.writeFileSync(sampleFile, 'এটি আপলোড প্রদর্শনের জন্য একটি নমুনা ফাইল।\n'.repeat(10)); // মাল্টিপার্ট ফর্ম-ডেটা সীমানা এবং বডি তৈরি করার ফাংশন ফাংশন createMultipartFormData(ক্ষেত্র, ফাইল) { const boundary = `----NodeJSUploadExample${Math.random().toString(16).substr(2)}`; let body = ''; // কাস্টম ক্ষেত্র যোগ করুন Object.keys(ক্ষেত্র)।forEach(field => { body += `--${সীমা}\r\n`; body += `কন্টেন্ট-ডিসপোজিশন: ফর্ম-ডেটা; name="${field}"\r\n\r\n`; body += `${ক্ষেত্র[ক্ষেত্র]}\r\n`; }); // ফাইল যোগ করুন Object.keys(files).forEach(fileField => { const filePath = files[fileField]; const filename = path.basename(filePath); const fileContent = fs.readFileSync(filePath); body += `--${সীমা}\r\n`; body += `কন্টেন্ট-ডিসপোজিশন: ফর্ম-ডেটা; name="${fileField}"; filename="${filename}"\r\n`; body += `Content-Type: application/octet-stream\r\n\r\n`; body += fileContent.toString() + '\r\n'; }); // চূড়ান্ত সীমানা যোগ করুন body += `--${সীমা}--\r\n`; ফিরে সীমানা শরীর }; } // ফর্ম ডেটা প্রস্তুত করুন const formData = CreateMultipartFormData( { নাম: 'Node.js আপলোড উদাহরণ', বর্ণনা: 'HTTP ক্লায়েন্ট অনুরোধ ব্যবহার করে একটি ফাইল আপলোড করা হচ্ছে' }, { ফাইল: নমুনা ফাইল } ); // অনুরোধের বিকল্প const বিকল্প = { হোস্টনাম: 'httpbin.org', পোর্ট: 80, পথ: '/পোস্ট', পদ্ধতি: 'পোস্ট', শিরোনাম: { 'কন্টেন্ট-টাইপ': `মাল্টিপার্ট/ফর্ম-ডেটা; boundary=${formData.boundary}`, 'সামগ্রী-দৈর্ঘ্য': Buffer.byteLength(formData.body) } }; // অনুরোধটি তৈরি করুন const req = http.request(options, (res) => { console.log(`আপলোড স্থিতি: ${res.statusCode}`); let responseData = ''; res.setEncoding('utf8'); res.on('ডেটা', (খণ্ড) => { প্রতিক্রিয়া ডেটা += খণ্ড; }); res.on('end', () => { console.log('আপলোড প্রতিক্রিয়া:'); চেষ্টা করুন { const প্রতিক্রিয়া = JSON.stringify(JSON.parse(responseData), null, 2); console.log(প্রতিক্রিয়া); } ধরা (ই) { console.log(responseData); } // নমুনা ফাইল পরিষ্কার করুন fs.unlinkSync(sampleFile); console.log('নমুনা ফাইল সরানো'); }); }); req.on('error', (e) => { console.error(`আপলোড ত্রুটি: ${e.message}`); }); // ফর্ম ডেটা পাঠান req.write(formData.body); req.end(); console.log('ফাইল আপলোড হচ্ছে...');
অনুরোধের সময়সীমা হ্যান্ডলিং
অনুরোধের সময়সীমা সেট করা এবং ম্যানিপুলেট করা:
const http = প্রয়োজন('http'); // সময়সীমার সাথে একটি অনুরোধ তৈরি করুন const req = http.request({ হোস্টনাম: 'example.com', পোর্ট: 80, পথ: '/', পদ্ধতি: 'GET', টাইমআউট: 8080 // 3 সেকেন্ড টাইমআউট }, (res) => { console.log(`STATUS: ${res.statusCode}`); res.resume(); // প্রতিক্রিয়া ডেটা ব্যবহার করুন }); // টাইমআউট ইভেন্ট পরিচালনা করুন req.on('টাইমআউট', () => { console.log('রিকোয়েস্ট টাইম আউট 3 সেকেন্ড পরে'); req.abort(); // অনুরোধ বাদ দিন }); // abort () দ্বারা সৃষ্ট ত্রুটি সহ ত্রুটিগুলি পরিচালনা করুন req.on('error', (err) => { console.error(`অনুরোধ ত্রুটি: ${err.message}`); }); // অনুরোধটি সম্পূর্ণ করুন req.end();