আমি কীভাবে নোড.জেজে ডেটা সহ বিদেশী এইচটিটিপি পোস্ট অনুরোধ করতে পারি?
node-fetch
যা fetch
HTTP অনুরোধগুলি করার জন্য স্থানীয় জাভাস্ক্রিপ্ট পদ্ধতির বাস্তবায়ন ।
আমি কীভাবে নোড.জেজে ডেটা সহ বিদেশী এইচটিটিপি পোস্ট অনুরোধ করতে পারি?
node-fetch
যা fetch
HTTP অনুরোধগুলি করার জন্য স্থানীয় জাভাস্ক্রিপ্ট পদ্ধতির বাস্তবায়ন ।
উত্তর:
গুগল কম্পাইলার এপিআইতে পোষ্ট অনুরোধ করার জন্য নোড.জেএস ব্যবহার করার উদাহরণ এখানে রয়েছে:
// We need this to build our post string
var querystring = require('querystring');
var http = require('http');
var fs = require('fs');
function PostCode(codestring) {
// Build the post string from an object
var post_data = querystring.stringify({
'compilation_level' : 'ADVANCED_OPTIMIZATIONS',
'output_format': 'json',
'output_info': 'compiled_code',
'warning_level' : 'QUIET',
'js_code' : codestring
});
// An object of options to indicate where to post to
var post_options = {
host: 'closure-compiler.appspot.com',
port: '80',
path: '/compile',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(post_data)
}
};
// Set up the request
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
});
// post the data
post_req.write(post_data);
post_req.end();
}
// This is an async file read
fs.readFile('LinkedList.js', 'utf-8', function (err, data) {
if (err) {
// If this were just a small part of the application, you would
// want to handle this differently, maybe throwing an exception
// for the caller to handle. Since the file is absolutely essential
// to the program's functionality, we're going to exit with a fatal
// error instead.
console.log("FATAL An error occurred trying to read in the file: " + err);
process.exit(-2);
}
// Make sure there's data before we post it
if(data) {
PostCode(data);
}
else {
console.log("No data to post");
process.exit(-1);
}
});
হার্ডকডযুক্ত স্ট্রিংয়ের পরিবর্তে কোনও ফাইল থেকে কীভাবে ডেটা পোস্ট করা যায় তা দেখানোর জন্য আমি কোডটি আপডেট করেছি। এটি fs.readFile
অর্জনের জন্য এটি async কমান্ড ব্যবহার করে , একটি সফল পঠনের পরে আসল কোড পোস্ট করে। যদি কোনও ত্রুটি থাকে তবে এটি নিক্ষেপ করা হয় এবং কোনও ডেটা না থাকলে প্রক্রিয়াটি ব্যর্থতা নির্দেশ করার জন্য একটি নেতিবাচক মান সহ প্রস্থান করে।
querystring.stringify()
নেস্টেড অবজেক্টগুলিকে সমর্থন করে না , তাই আপনি qs.stringify()
পরিবর্তে এটি ব্যবহার করতে পারেন ।
Content-Length
বাইটগুলি এবং স্ট্রিং দৈর্ঘ্যের প্রয়োজন হয় না (UTF-16 ইত্যাদি)। ব্যবহার Buffer.byteLength(data)
সর্বদা সঠিক হবে।
querystring.stringify
আপনার নিজস্ব ডেটা অবজেক্ট হওয়া উচিত, এই উত্তরে প্রদর্শিত জাঙ্কটি নয় (যা ফাইল ভিত্তিক অবজেক্টগুলির জন্য কার্যকর হতে পারে?)। আমি যুগ যুগ ধরে যে আটকে হয় ... stackoverflow.com/questions/9768192/... আমার সম্পূর্ণ সমাধান প্রদান করা
আপনি অনুরোধ লাইব্রেরিটি ব্যবহার করলে এটি অনেক সহজ হয়ে যায় easier
var request = require('request');
request.post(
'http://www.yoursite.com/formpage',
{ json: { key: 'value' } },
function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
);
একটি সুন্দর বাক্য গঠন প্রদানের পাশাপাশি এটি জসন অনুরোধগুলিকে সহজ করে তোলে, ওউথ সাইনিং পরিচালনা করে (টুইটার ইত্যাদির জন্য), মাল্টি-পার্ট ফর্ম (যেমন ফাইল আপলোড করার জন্য) এবং স্ট্রিমিং করতে পারে।
অনুরোধটি ইনস্টল করতে কমান্ডটি ব্যবহার করুন npm install request
আপনি অনুরোধ গ্রন্থাগার ব্যবহার করতে পারেন। https://www.npmjs.com/package/request
var request = require('request');
JSON ডেটা পোস্ট করতে:
var myJSONObject = { ... };
request({
url: "http://josiahchoi.com/myjson",
method: "POST",
json: true, // <--Very important!!!
body: myJSONObject
}, function (error, response, body){
console.log(response);
});
এক্সএমএল ডেটা পোস্ট করতে:
var myXMLText = '<xml>...........</xml>'
request({
url: "http://josiahchoi.com/myjson",
method: "POST",
headers: {
"content-type": "application/xml", // <--Very important!!!
},
body: myXMLText
}, function (error, response, body){
console.log(response);
});
আমি রেস্টলার এবং সুই ব্যবহার করি উত্পাদন কাজের জন্য । এগুলি উভয়ই দেশীয় httpsquest চেয়ে অনেক বেশি শক্তিশালী। বেসিক প্রমাণীকরণ, বিশেষ শিরোনাম এন্ট্রি বা এমনকি ফাইল আপলোড / ডাউনলোডের মাধ্যমে অনুরোধ করা সম্ভব।
পোস্ট / পাওয়ার অপারেশন হিসাবে, এগুলি httpsquest ব্যবহার করে কাঁচা এজ্যাক্স কলগুলির তুলনায় খুব সহজ।
needle.post('https://my.app.com/endpoint', {foo:'bar'},
function(err, resp, body){
console.log(body);
});
সহজ এবং নির্ভরতা-মুক্ত। একটি প্রতিশ্রুতি ব্যবহার করুন যাতে আপনি ফলাফলটির জন্য অপেক্ষা করতে পারেন। এটি প্রতিক্রিয়ার মূল অংশটি দেয় এবং প্রতিক্রিয়া স্থিতির কোডটি পরীক্ষা করে না।
const https = require('https');
function httpsPost({body, ...options}) {
return new Promise((resolve,reject) => {
const req = https.request({
method: 'POST',
...options,
}, res => {
const chunks = [];
res.on('data', data => chunks.push(data))
res.on('end', () => {
let body = Buffer.concat(chunks);
switch(res.headers['content-type']) {
case 'application/json':
body = JSON.parse(body);
break;
}
resolve(body)
})
})
req.on('error',reject);
if(body) {
req.write(body);
}
req.end();
})
}
ব্যবহার:
const res = await httpsPost({
hostname: 'sentry.io',
path: `/api/0/organizations/org/releases/${changesetId}/deploys/`,
headers: {
'Authorization': `Bearer ${process.env.SENTRY_AUTH_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
environment: isLive ? 'production' : 'demo',
})
})
write
পদ্ধতিতে কী req,write()
ব্যবহার করা হয়?
এছাড়াও আপনি ব্যবহার করতে পারেন Requestify , একটি সত্যিই শীতল এবং সহজ HTTP- র ক্লায়েন্ট আমি nodeJS লিখেছেন + + এটা ক্যাশে সমর্থন করে।
কেবল নিম্নলিখিতটি করুন:
var requestify = require('requestify');
requestify.post('http://example.com', {
hello: 'world'
})
.then(function(response) {
// Get the response body (JSON parsed or jQuery object for XMLs)
response.getBody();
});
আপডেট 2020:
আমি সত্যিই ফিন উপভোগ করেছি - অতি-লাইটওয়েট নোড.জেএস এইচটিটিপি ক্লায়েন্ট
এটি দুটি ভিন্ন উপায়ে ব্যবহার করা যেতে পারে। প্রতিশ্রুতি সহ একটি (অ্যাসিঙ্ক / আওয়েট) এবং অন্যটি সনাতন কলব্যাক শৈলীর সাথে।
এর মাধ্যমে ইনস্টল করুন: npm i phin
সরাসরি এটির সাথে পড়ুন await
:
const p = require('phin')
await p({
url: 'https://ethanent.me',
method: 'POST',
data: {
hey: 'hi'
}
})
অপরিকল্পিত (কলব্যাক) স্টাইল:
const p = require('phin').unpromisified
p('https://ethanent.me', (err, res) => {
if (!err) console.log(res.body)
})
২০১৫ সালের মতো এখন বিভিন্ন বিস্তৃত গ্রন্থাগার রয়েছে যা নূন্যতম কোডিংয়ের মাধ্যমে এটি সম্পাদন করতে পারে। আপনারা নিম্ন স্তরের এইচটিটিপি স্টাফের নিয়ন্ত্রণের প্রয়োজন না হলে আমি HTTP অনুরোধগুলির জন্য মার্জিত হালকা ওজনের গ্রন্থাগারগুলি বেশি পছন্দ করি।
এরকম একটি গ্রন্থাগার ইউনিরেস্ট st
এটি ইনস্টল করতে, ব্যবহার করুন npm
।
$ npm install unirest
এবং Hello, World!
উদাহরণে যে প্রত্যেকে অভ্যস্ত।
var unirest = require('unirest');
unirest.post('http://example.com/helloworld')
.header('Accept', 'application/json')
.send({ "Hello": "World!" })
.end(function (response) {
console.log(response.body);
});
অতিরিক্ত:
প্রচুর লোকেরা অনুরোধটি ব্যবহারের পরামর্শ দিচ্ছেন [২]
এটি লক্ষণীয় হওয়া উচিত যে পর্দার আড়ালে লাইব্রেরি Unirest
ব্যবহার করা হয় request
।
Unirest সরাসরি অনুরোধ অবজেক্টে অ্যাক্সেসের জন্য পদ্ধতি সরবরাহ করে।
উদাহরণ:
var Request = unirest.get('http://mockbin.com/request');
var https = require('https');
/**
* HOW TO Make an HTTP Call - POST
*/
// do a POST request
// create the JSON object
jsonObject = JSON.stringify({
"message" : "The web of things is approaching, let do some tests to be ready!",
"name" : "Test message posted with node.js",
"caption" : "Some tests with node.js",
"link" : "http://www.youscada.com",
"description" : "this is a description",
"picture" : "http://youscada.com/wp-content/uploads/2012/05/logo2.png",
"actions" : [ {
"name" : "youSCADA",
"link" : "http://www.youscada.com"
} ]
});
// prepare the header
var postheaders = {
'Content-Type' : 'application/json',
'Content-Length' : Buffer.byteLength(jsonObject, 'utf8')
};
// the post options
var optionspost = {
host : 'graph.facebook.com',
port : 443,
path : '/youscada/feed?access_token=your_api_key',
method : 'POST',
headers : postheaders
};
console.info('Options prepared:');
console.info(optionspost);
console.info('Do the POST call');
// do the POST call
var reqPost = https.request(optionspost, function(res) {
console.log("statusCode: ", res.statusCode);
// uncomment it for header details
// console.log("headers: ", res.headers);
res.on('data', function(d) {
console.info('POST result:\n');
process.stdout.write(d);
console.info('\n\nPOST completed');
});
});
// write the json data
reqPost.write(jsonObject);
reqPost.end();
reqPost.on('error', function(e) {
console.error(e);
});
নোডে এইচটিটিপি পোস্ট অনুরোধ করার জন্য আপনি কয়েকটি ডজনগুলি ওপেন-সোর্স লাইব্রেরি উপলব্ধ available
const axios = require('axios');
const data = {
name: 'John Doe',
job: 'Content Writer'
};
axios.post('https://reqres.in/api/users', data)
.then((res) => {
console.log(`Status: ${res.status}`);
console.log('Body: ', res.data);
}).catch((err) => {
console.error(err);
});
const needle = require('needle');
const data = {
name: 'John Doe',
job: 'Content Writer'
};
needle('post', 'https://reqres.in/api/users', data, {json: true})
.then((res) => {
console.log(`Status: ${res.statusCode}`);
console.log('Body: ', res.body);
}).catch((err) => {
console.error(err);
});
const request = require('request');
const options = {
url: 'https://reqres.in/api/users',
json: true,
body: {
name: 'John Doe',
job: 'Content Writer'
}
};
request.post(options, (err, res, body) => {
if (err) {
return console.log(err);
}
console.log(`Status: ${res.statusCode}`);
console.log(body);
});
const https = require('https');
const data = JSON.stringify({
name: 'John Doe',
job: 'Content Writer'
});
const options = {
hostname: 'reqres.in',
path: '/api/users',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
};
const req = https.request(options, (res) => {
let data = '';
console.log('Status Code:', res.statusCode);
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('Body: ', JSON.parse(data));
});
}).on("error", (err) => {
console.log("Error: ", err.message);
});
req.write(data);
req.end();
বিশদ জন্য, এই নিবন্ধটি দেখুন ।
অনুরোধ করার জন্য এটি আমি সবচেয়ে সহজ উপায়: 'অনুরোধ' মডিউলটি ব্যবহার করে।
'অনুরোধ' মডিউল ইনস্টল করার আদেশ:
$ npm install request
উদাহরণ কোড:
var request = require('request')
var options = {
method: 'post',
body: postData, // Javascript object
json: true, // Use,If you are sending JSON data
url: url,
headers: {
// Specify headers, If any
}
}
request(options, function (err, res, body) {
if (err) {
console.log('Error :', err)
return
}
console.log(' Body :', body)
});
অনুরোধ করার জন্য আপনি নোড.জেএস এর অন্তর্নির্মিত 'এইচটিপি' মডিউলটিও ব্যবহার করতে পারেন।
আমি হাইপারজেন্টের সরলতা পছন্দ করি ( https://github.com/visionmedia/superagent )। নোড এবং ব্রাউজার উভয়ই একই API।
;(async function() {
var response = await superagent.post('http://127.0.0.1:8125/', {age: 2})
console.log(response)
})
নোড-ফেচও রয়েছে ( https://www.npmjs.com/package/node-fetch ), যার একটি এপিআই রয়েছে যা fetch
ব্রাউজারগুলির সাথে মেলে - তবে এটির জন্য ম্যানুয়াল ক্যোয়ারী স্ট্রিং এনকোডিং দরকার, সামগ্রীগুলির ধরণগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করে না, বা সুতরাং অন্য যে কোনও কাজ উপার্জনকারী করেন।
আপনি যদি প্রতিশ্রুতি ভিত্তিক এইচটিটিপি অনুরোধের সন্ধান করছেন তবে অক্ষরগুলি তার কাজটি দুর্দান্তভাবে করে।
const axios = require('axios');
axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'})
.then((response) => console.log(response))
.catch((error) => console.log(error));
অথবা
await axios.post('/user', {firstName: 'Fred',lastName: 'Flintstone'})
বিশ্রাম / জেএসএন অনুরোধ পোস্ট করতে
করতে আমরা কেবল অনুরোধ প্যাকেজটি ব্যবহার করতে পারি এবং জেসন ভেরিয়েবলের যে মানগুলি পাঠাতে হয় সেগুলি সংরক্ষণ করতে পারি।
প্রথমে আপনার কনসোলে প্রয়োজনীয় প্যাকেজটি এনপিএম ইনস্টল অনুরোধ - সেভের মাধ্যমে ইনস্টল করুন
var request = require('request');
var options={
'key':'28',
'key1':'value',
'key2':'value'
}
request({
url:"http://dev.api.ean.com/ean-services/rs/hotel/v3/ping?
minorRev="+options.key+
"&cid="+options.key1+
"&apiKey="+options.key2,
method:"POST",
json:true},function(error,response,body){
console.log(body)
}
);
আমি একটি ভিডিও পেয়েছি যা এটি কীভাবে অর্জন করতে হবে তার ব্যাখ্যা করে: https://www.youtube.com/watch?v=nuw48-u3Yrg
এটি "ক্যোরিস্ট্রিং" এবং "স্ট্রিংবিল্ডার" মডিউলগুলির সাথে একসাথে ডিফল্ট "HTTP" মডিউল ব্যবহার করে। অ্যাপ্লিকেশনটি একটি ওয়েব পৃষ্ঠা থেকে দুটি সংখ্যা (দুটি পাঠ্যবক্স ব্যবহার করে) নেয় এবং জমা দেওয়ার পরে, এই দুটিটির যোগফল দেয় (পাঠ্য বাক্সগুলিতে মানগুলি বজায় রাখার পাশাপাশি)। এটি আমি যে কোনও জায়গায় খুঁজে পেতে পারি এটি সেরা উদাহরণ।
var http = require("http");
var qs = require("querystring");
var StringBuilder = require("stringbuilder");
var port = 9000;
function getCalcHtml(req, resp, data) {
var sb = new StringBuilder({ newline: "\r\n" });
sb.appendLine("<html>");
sb.appendLine(" <body>");
sb.appendLine(" <form method='post'>");
sb.appendLine(" <table>");
sb.appendLine(" <tr>");
sb.appendLine(" <td>Enter First No: </td>");
if (data && data.txtFirstNo) {
sb.appendLine(" <td><input type='text' id='txtFirstNo' name='txtFirstNo' value='{0}'/></td>", data.txtFirstNo);
}
else {
sb.appendLine(" <td><input type='text' id='txtFirstNo' name='txtFirstNo' /></td>");
}
sb.appendLine(" </tr>");
sb.appendLine(" <tr>");
sb.appendLine(" <td>Enter Second No: </td>");
if (data && data.txtSecondNo) {
sb.appendLine(" <td><input type='text' id='txtSecondNo' name='txtSecondNo' value='{0}'/></td>", data.txtSecondNo);
}
else {
sb.appendLine(" <td><input type='text' id='txtSecondNo' name='txtSecondNo' /></td>");
}
sb.appendLine(" </tr>");
sb.appendLine(" <tr>");
sb.appendLine(" <td><input type='submit' value='Calculate' /></td>");
sb.appendLine(" </tr>");
if (data && data.txtFirstNo && data.txtSecondNo) {
var sum = parseInt(data.txtFirstNo) + parseInt(data.txtSecondNo);
sb.appendLine(" <tr>");
sb.appendLine(" <td>Sum: {0}</td>", sum);
sb.appendLine(" </tr>");
}
sb.appendLine(" </table>");
sb.appendLine(" </form>")
sb.appendLine(" </body>");
sb.appendLine("</html>");
sb.build(function (err, result) {
resp.write(result);
resp.end();
});
}
function getCalcForm(req, resp, data) {
resp.writeHead(200, { "Content-Type": "text/html" });
getCalcHtml(req, resp, data);
}
function getHome(req, resp) {
resp.writeHead(200, { "Content-Type": "text/html" });
resp.write("<html><html><head><title>Home</title></head><body>Want to some calculation? Click <a href='/calc'>here</a></body></html>");
resp.end();
}
function get404(req, resp) {
resp.writeHead(404, "Resource Not Found", { "Content-Type": "text/html" });
resp.write("<html><html><head><title>404</title></head><body>404: Resource not found. Go to <a href='/'>Home</a></body></html>");
resp.end();
}
function get405(req, resp) {
resp.writeHead(405, "Method not supported", { "Content-Type": "text/html" });
resp.write("<html><html><head><title>405</title></head><body>405: Method not supported</body></html>");
resp.end();
}
http.createServer(function (req, resp) {
switch (req.method) {
case "GET":
if (req.url === "/") {
getHome(req, resp);
}
else if (req.url === "/calc") {
getCalcForm(req, resp);
}
else {
get404(req, resp);
}
break;
case "POST":
if (req.url === "/calc") {
var reqBody = '';
req.on('data', function (data) {
reqBody += data;
if (reqBody.length > 1e7) { //10MB
resp.writeHead(413, 'Request Entity Too Large', { 'Content-Type': 'text/html' });
resp.end('<!doctype html><html><head><title>413</title></head><body>413: Request Entity Too Large</body></html>');
}
});
req.on('end', function () {
var formData = qs.parse(reqBody);
getCalcForm(req, resp, formData);
});
}
else {
get404(req, resp);
}
break;
default:
get405(req, resp);
break;
}
}).listen(port);
কারণ আমার এই সমাধান POST
এবং GET
।
Post
পদ্ধতি সম্পর্কে :
যদি শরীরটি কোনও JSON অবজেক্ট হয়, সুতরাং এটির ডিসায়ারাইজ করা JSON.stringify
এবং সম্ভবত সেই Content-Lenght
অনুযায়ী শিরোনামটি সেট করা গুরুত্বপূর্ণ :
var bodyString=JSON.stringify(body)
var _headers = {
'Content-Length': Buffer.byteLength(bodyString)
};
অনুরোধটি লেখার আগে:
request.write( bodyString );
উভয় Get
এবং Post
পদ্ধতি সম্পর্কে :
এটি সংযোগ বিচ্ছিন্ন timeout
হিসাবে দেখা দিতে পারে socket
, সুতরাং আপনার অবশ্যই এটির হ্যান্ডলারটি রেজিস্টার করতে হবে:
request.on('socket', function (socket) {
socket.setTimeout( self.timeout );
socket.on('timeout', function() {
request.abort();
if(timeout) return timeout( new Error('request timed out') );
});
});
request
হ্যান্ডলারটি যখন
request.on('timeout', function () {
// Timeout happend. Server received request, but not handled it
// (i.e. doesn't send any response or it took to long).
// You don't know what happend.
// It will emit 'error' message as well (with ECONNRESET code).
req.abort();
if(timeout) return timeout( new Error('request timed out') );
});
আমি দৃ strongly়ভাবে উভয় হ্যান্ডলারের নিবন্ধিত পরামর্শ।
প্রতিক্রিয়া বডি ছিঁড়ে গেছে, তাই আপনাকে অবশ্যই data
হ্যান্ডলারের সাথে একমত হতে হবে :
var body = '';
response.on('data', function(d) {
body += d;
});
এ পুরো প্রতিক্রিয়া শরীর উপস্থিত থাকবে:end
body
response.on('end', function() {
try {
var jsonResponse=JSON.parse(body);
if(success) return success( jsonResponse );
} catch(ex) { // bad json
if(error) return error(ex.toString());
}
});
এটি দিয়ে জড়িয়ে থাকা নিরাপদ try
... the
JSON.parse` ধরুন যেহেতু আপনি নিশ্চিত হতে পারবেন না যে এটি আসলে একটি ভাল-ফর্ম্যাট করা জসন এবং আপনার অনুরোধটি করার সময় এটি সম্পর্কে নিশ্চিত হওয়ার কোনও উপায় নেই।
মডিউল: SimpleAPI
/**
* Simple POST and GET
* @author Loreto Parisi (loretoparisi at gmail dot com)
*/
(function() {
var SimpleAPI;
SimpleAPI = (function() {
var qs = require('querystring');
/**
* API Object model
* @author Loreto Parisi (loretoparisi at gmail dot com)
*/
function SimpleAPI(host,port,timeout,ssl,debug,json) {
this.host=host;
this.port=port;
this.timeout=timeout;
/** true to use ssl - defaults to true */
this.ssl=ssl || true;
/** true to console log */
this.debug=debug;
/** true to parse response as json - defaults to true */
this.json= (typeof(json)!='undefined')?json:true;
this.requestUrl='';
if(ssl) { // use ssl
this.http = require('https');
} else { // go unsafe, debug only please
this.http = require('http');
}
}
/**
* HTTP GET
* @author Loreto Parisi (loretoparisi at gmail dot com)
*/
SimpleAPI.prototype.Get = function(path, headers, params, success, error, timeout) {
var self=this;
if(params) {
var queryString=qs.stringify(params);
if( queryString ) {
path+="?"+queryString;
}
}
var options = {
headers : headers,
hostname: this.host,
path: path,
method: 'GET'
};
if(this.port && this.port!='80') { // port only if ! 80
options['port']=this.port;
}
if(self.debug) {
console.log( "SimpleAPI.Get", headers, params, options );
}
var request=this.http.get(options, function(response) {
if(self.debug) { // debug
console.log( JSON.stringify(response.headers) );
}
// Continuously update stream with data
var body = '';
response.on('data', function(d) {
body += d;
});
response.on('end', function() {
try {
if(self.json) {
var jsonResponse=JSON.parse(body);
if(success) return success( jsonResponse );
}
else {
if(success) return success( body );
}
} catch(ex) { // bad json
if(error) return error( ex.toString() );
}
});
});
request.on('socket', function (socket) {
socket.setTimeout( self.timeout );
socket.on('timeout', function() {
request.abort();
if(timeout) return timeout( new Error('request timed out') );
});
});
request.on('error', function (e) {
// General error, i.e.
// - ECONNRESET - server closed the socket unexpectedly
// - ECONNREFUSED - server did not listen
// - HPE_INVALID_VERSION
// - HPE_INVALID_STATUS
// - ... (other HPE_* codes) - server returned garbage
console.log(e);
if(error) return error(e);
});
request.on('timeout', function () {
// Timeout happend. Server received request, but not handled it
// (i.e. doesn't send any response or it took to long).
// You don't know what happend.
// It will emit 'error' message as well (with ECONNRESET code).
req.abort();
if(timeout) return timeout( new Error('request timed out') );
});
self.requestUrl = (this.ssl?'https':'http') + '://' + request._headers['host'] + request.path;
if(self.debug) {
console.log("SimpleAPI.Post",self.requestUrl);
}
request.end();
} //RequestGet
/**
* HTTP POST
* @author Loreto Parisi (loretoparisi at gmail dot com)
*/
SimpleAPI.prototype.Post = function(path, headers, params, body, success, error, timeout) {
var self=this;
if(params) {
var queryString=qs.stringify(params);
if( queryString ) {
path+="?"+queryString;
}
}
var bodyString=JSON.stringify(body)
var _headers = {
'Content-Length': Buffer.byteLength(bodyString)
};
for (var attrname in headers) { _headers[attrname] = headers[attrname]; }
var options = {
headers : _headers,
hostname: this.host,
path: path,
method: 'POST',
qs : qs.stringify(params)
};
if(this.port && this.port!='80') { // port only if ! 80
options['port']=this.port;
}
if(self.debug) {
console.log( "SimpleAPI.Post\n%s\n%s", JSON.stringify(_headers,null,2), JSON.stringify(options,null,2) );
}
if(self.debug) {
console.log("SimpleAPI.Post body\n%s", JSON.stringify(body,null,2) );
}
var request=this.http.request(options, function(response) {
if(self.debug) { // debug
console.log( JSON.stringify(response.headers) );
}
// Continuously update stream with data
var body = '';
response.on('data', function(d) {
body += d;
});
response.on('end', function() {
try {
console.log("END", body);
var jsonResponse=JSON.parse(body);
if(success) return success( jsonResponse );
} catch(ex) { // bad json
if(error) return error(ex.toString());
}
});
});
request.on('socket', function (socket) {
socket.setTimeout( self.timeout );
socket.on('timeout', function() {
request.abort();
if(timeout) return timeout( new Error('request timed out') );
});
});
request.on('error', function (e) {
// General error, i.e.
// - ECONNRESET - server closed the socket unexpectedly
// - ECONNREFUSED - server did not listen
// - HPE_INVALID_VERSION
// - HPE_INVALID_STATUS
// - ... (other HPE_* codes) - server returned garbage
console.log(e);
if(error) return error(e);
});
request.on('timeout', function () {
// Timeout happend. Server received request, but not handled it
// (i.e. doesn't send any response or it took to long).
// You don't know what happend.
// It will emit 'error' message as well (with ECONNRESET code).
req.abort();
if(timeout) return timeout( new Error('request timed out') );
});
self.requestUrl = (this.ssl?'https':'http') + '://' + request._headers['host'] + request.path;
if(self.debug) {
console.log("SimpleAPI.Post",self.requestUrl);
}
request.write( bodyString );
request.end();
} //RequestPost
return SimpleAPI;
})();
module.exports = SimpleAPI
}).call(this);
ব্যবহার:
// Parameters
// domain: example.com
// ssl:true, port:80
// timeout: 30 secs
// debug: true
// json response:true
var api = new SimpleAPI('posttestserver.com', 80, 1000 * 10, true, true, true);
var headers = {
'Content-Type' : 'application/json',
'Accept' : 'application/json'
};
var params = {
"dir" : "post-test"
};
var method = 'post.php';
api.Post(method, headers, params, body
, function(response) { // success
console.log( response );
}
, function(error) { // error
console.log( error.toString() );
}
, function(error) { // timeout
console.log( new Error('timeout error') );
});
পোস্টটি পরিচালনা করতে এবং আমার প্রকল্পের জন্য অনুরোধ পেতে নিম্ন স্তরের ইউটিলিটি তৈরি করার সময় প্রচুর লড়াইয়ের পরে, আমি আমার প্রচেষ্টা এখানে পোস্ট করার সিদ্ধান্ত নিয়েছি। অনেকটা গৃহীত উত্তরের পংক্তিতে, জেএসএন ডেটা প্রেরণের জন্য HTTP এবং https POST অনুরোধ করার জন্য একটি স্নিপেট এখানে।
const http = require("http")
const https = require("https")
// Request handler function
let postJSON = (options, postData, callback) => {
// Serializing JSON
post_data = JSON.stringify(postData)
let port = options.port == 443 ? https : http
// Callback function for the request
let req = port.request(options, (res) => {
let output = ''
res.setEncoding('utf8')
// Listener to receive data
res.on('data', (chunk) => {
output += chunk
});
// Listener for intializing callback after receiving complete response
res.on('end', () => {
let obj = JSON.parse(output)
callback(res.statusCode, obj)
});
});
// Handle any errors occurred while making request
req.on('error', (err) => {
//res.send('error: ' + err.message)
});
// Request is made here, with data as string or buffer
req.write(post_data)
// Ending the request
req.end()
};
let callPost = () => {
let data = {
'name': 'Jon',
'message': 'hello, world'
}
let options = {
host: 'domain.name', // Your domain name
port: 443, // 443 for https and 80 for http
path: '/path/to/resource', // Path for the request
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)
}
}
postJSON(options, data, (statusCode, result) => {
// Handle response
// Process the received data
});
}
let request = require('request');
let jsonObj = {};
request({
url: "https://myapii.com/sendJsonData",
method: "POST",
json: true,
body: jsonObj
}, function (error, resp, body){
console.log(resp);
});
অথবা আপনি এই গ্রন্থাগারটি ব্যবহার করতে পারেন:
let axios = require("axios");
let jsonObj = {};
const myJsonAPI = axios.create({
baseURL: 'https://myapii.com',
timeout: 120*1000
});
let response = await myJsonAPI.post("sendJsonData",jsonobj).catch(e=>{
res.json(e);
});
console.log(response);
request
গ্রন্থাগার হ্রাস করা হয়েছে।
অ্যাকজিওস ব্রাউজার এবং নোড.জেএস এর জন্য একটি প্রতিশ্রুতি ভিত্তিক এইচটিটিপি ক্লায়েন্ট is অ্যাকজিওসগুলি এসইএসটি সমাপ্তিগুলির জন্য অসম্পূর্ণ HTTP অনুরোধগুলি প্রেরণ এবং CRUD ক্রিয়াকলাপগুলি সহজ করে তোলে। এটি সরল জাভাস্ক্রিপ্টে বা ভ্যু বা রিএ্যাক্টের মতো লাইব্রেরিতে ব্যবহার করা যেতে পারে।
const axios = require('axios');
var dataToPost = {
email: "your email",
password: "your password"
};
let axiosConfiguration = {
headers: {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
}
};
axios.post('endpoint or url', dataToPost, axiosConfiguration)
.then((res) => {
console.log("Response: ", res);
})
.catch((err) => {
console.log("error: ", err);
})
অতিরিক্ত অক্ষরের বিকল্প এবং কাস্টম শিরোলেখ ব্যবহার করে এমন একটি অক্ষর.পস্ট অনুরোধের অন্য একটি অক্ষর পোস্ট করা।
var postData = {
email: "test@test.com",
password: "password"
};
let axiosConfig = {
headers: {
'Content-Type': 'application/json;charset=UTF-8',
"Access-Control-Allow-Origin": "*",
}
};
axios.post('http://<host>:<port>/<path>', postData, axiosConfig)
.then((res) => {
console.log("RESPONSE RECEIVED: ", res);
})
.catch((err) => {
console.log("AXIOS ERROR: ", err);
})
অনুরোধ নির্ভরতা ব্যবহার করে ।
সহজ সমাধান:
import request from 'request'
var data = {
"host":"127.1.1.1",
"port":9008
}
request.post( baseUrl + '/peers/connect',
{
json: data, // your payload data placed here
headers: {
'X-Api-Key': 'dajzmj6gfuzmbfnhamsbuxivc', // if authentication needed
'Content-Type': 'application/json'
}
}, function (error, response, body) {
if (error) {
callback(error, null)
} else {
callback(error, response.body)
}
});
request
থেকে এসেছে?
Request-Promise
প্রতিশ্রুতি ভিত্তিক প্রতিক্রিয়া সরবরাহ করে। 2XX ব্যতীত HTTP প্রতিক্রিয়া কোডগুলি প্রতিশ্রুতি প্রত্যাখ্যান করবে। বিকল্পগুলি সেট করে এটি ওভাররাইট করা যেতে পারে imp সাধারণ = মিথ্যা
var options = {
method: 'POST',
uri: 'http://api.posttestserver.com/post',
body: {
some: 'payload'
},
json: true // Automatically stringifies the body to JSON
};
rp(options)
.then(function (parsedBody) {
// POST succeeded...
})
.catch(function (err) {
// POST failed...
});