node.js에서 데이터와 함께 아웃 바운드 HTTP POST 요청을 만들려면 어떻게해야합니까?
답변
다음은 node.js를 사용하여 Google 컴파일러 API에 POST 요청을하는 예입니다.
// 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 명령을 사용하여 읽은 후 실제 코드를 게시합니다. 오류가 있으면 오류가 발생하고 데이터가 없으면 프로세스는 음수 값으로 종료하여 실패를 나타냅니다.
답변
요청 라이브러리 를 사용하면 훨씬 쉬워집니다 .
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);
}
}
);
멋진 구문을 제공하는 것 외에도 json 요청을 쉽게하고 oauth 서명 (예 : 트위터 등)을 처리하고 여러 부분으로 된 양식 (예 : 파일 업로드) 및 스트리밍을 수행 할 수 있습니다.
요청 사용 명령을 설치하려면 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);
});
xml 데이터를 게시하려면
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);
});
답변
생산 목적으로 Restler 와 Needle 을 사용 합니다. 그것들은 네이티브 httprequest보다 훨씬 강력합니다. 기본 인증, 특수 헤더 항목 또는 파일 업로드 / 다운로드로 요청할 수 있습니다.
post / get 작업의 경우 httprequest를 사용하는 원시 ajax 호출보다 사용이 훨씬 간단합니다.
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',
})
})
답변
nodeJS + 용으로 작성한 정말 시원하고 간단한 HTTP 클라이언트 인 Requestify 를 사용할 수 있습니다 . 캐싱을 지원합니다.
다음을 수행하십시오.
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 업데이트 :
난 정말 즐기고했습니다 망막 기억을 – 울트라 경량 Node.js를 HTTP 클라이언트를
두 가지 방법으로 사용할 수 있습니다. 하나는 약속 (Async / Await)이고 다른 하나는 전통적인 콜백 스타일입니다.
다음을 통해 설치하십시오. npm i phin
README에서 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)
})
현재 2,015 최소 코딩이 수행 할 수있는 다른 라이브러리의 다양한 해주기있다. 저수준 HTTP 항목에 대한 제어가 절대적으로 필요하지 않으면 HTTP 요청에 대해 우아한 경량 라이브러리를 선호합니다.
그러한 라이브러리 중 하나는 Unirest입니다
설치하려면를 사용하십시오 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);
});
추가 :
많은 사람들이 요청 사용을 제안하고 있습니다 [2]
무대 뒤에서 라이브러리를 Unirest
사용 한다는 점은 주목할 가치가 request
있습니다.
Unirest는 요청 객체에 직접 액세스하기위한 메소드를 제공합니다.
예:
var Request = unirest.get('http://mockbin.com/request');