Node.js? any CURL 내부에서 원격 REST 호출을 하는 방법은 무엇입니까?
Node.js에서 CURL 호출을 위해 자식 프로세스를 사용하는 것 외에 원격 서버 REST API에 CURL 호출을 하고 반환 데이터를 가져오는 방법이 있습니까?
또한 원격 REST 호출에 대한 요청 헤더를 설정하고 GET(또는 POST)에서 쿼리 문자열도 설정해야 합니다.
저는 이것을 찾습니다: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs .
쿼리 문자열을 게시할 방법이 없습니다.
보다
var options = {
host: url,
port: 80,
path: '/resource?id=foo&bar=baz',
method: 'POST'
};
http.request(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
}).end();
요청 - 단순화된 HTTP 클라이언트를 사용하는 것은 어떻습니까?
2020년 2월 편집: 요청이 더 이상 사용되지 않으므로 더 이상 사용하면 안 됩니다.
다음은 GET입니다.
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body) // Print the google web page.
}
})
OP는 또한 게시물을 원했습니다.
request.post('http://service.com/upload', {form:{key:'value'}})
나는 node-fetch를 사용합니다. 왜냐하면 그것은 친숙한(당신이 웹 개발자라면) fetch() API를 사용하기 때문입니다. fetch()는 브라우저에서 임의의 HTTP 요청을 만드는 새로운 방법입니다.
네, 노드 js 질문인 건 알지만 API 개발자들이 암기하고 이해해야 하는 숫자를 줄이고 자바스크립트 코드의 재사용 가능성을 개선하고 싶지 않나요?페치가 기준이니까 거기에 모이면 어떨까요?
또 다른 좋은 점은fetch()
즉, 자바스크립트 Promise를 반환하므로 다음과 같은 비동기 코드를 작성할 수 있습니다.
let fetch = require('node-fetch');
fetch('http://localhost', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: '{}'
}).then(response => {
return response.json();
}).catch(err => {console.log(err);});
슈퍼시드 XMLHTTPRequest를 가져옵니다.여기 정보가 좀 더 있습니다.
http://isolasoftware.it/2012/05/28/call-rest-api-with-node-js/ 을 보세요.
var https = require('https');
/**
* HOW TO Make an HTTP Call - GET
*/
// options for GET
var optionsget = {
host : 'graph.facebook.com', // here only the domain name
// (no http/https !)
port : 443,
path : '/youscada', // the rest of the url with parameters if needed
method : 'GET' // do GET
};
console.info('Options prepared:');
console.info(optionsget);
console.info('Do the GET call');
// do the GET request
var reqGet = https.request(optionsget, function(res) {
console.log("statusCode: ", res.statusCode);
// uncomment it for header details
// console.log("headers: ", res.headers);
res.on('data', function(d) {
console.info('GET result:\n');
process.stdout.write(d);
console.info('\n\nCall completed');
});
});
reqGet.end();
reqGet.on('error', function(e) {
console.error(e);
});
/**
* 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);
});
/**
* Get Message - GET
*/
// options for GET
var optionsgetmsg = {
host : 'graph.facebook.com', // here only the domain name
// (no http/https !)
port : 443,
path : '/youscada/feed?access_token=you_api_key', // the rest of the url with parameters if needed
method : 'GET' // do GET
};
console.info('Options prepared:');
console.info(optionsgetmsg);
console.info('Do the GET call');
// do the GET request
var reqGet = https.request(optionsgetmsg, function(res) {
console.log("statusCode: ", res.statusCode);
// uncomment it for header details
// console.log("headers: ", res.headers);
res.on('data', function(d) {
console.info('GET result after POST:\n');
process.stdout.write(d);
console.info('\n\nCall completed');
});
});
reqGet.end();
reqGet.on('error', function(e) {
console.error(e);
});
악시오스
Node.js에서 Axios를 사용하는 예제(axios_example.js):
const axios = require('axios');
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;
app.get('/search', function(req, res) {
let query = req.query.queryStr;
let url = `https://your.service.org?query=${query}`;
axios({
method:'get',
url,
auth: {
username: 'the_username',
password: 'the_password'
}
})
.then(function (response) {
res.send(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
});
var server = app.listen(port);
프로젝트 디렉토리에서 다음 작업을 수행해야 합니다.
npm init
npm install express
npm install axios
node axios_example.js
그런 다음 다음에서 브라우저를 사용하여 Node.js REST API를 테스트할 수 있습니다.http://localhost:5000/search?queryStr=xxxxxxxxx
마찬가지로 다음과 같은 게시물도 수행할 수 있습니다.
axios({
method: 'post',
url: 'https://your.service.org/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
슈퍼에이전트
마찬가지로 SuperAgent도 사용할 수 있습니다.
superagent.get('https://your.service.org?query=xxxx')
.end((err, response) => {
if (err) { return console.log(err); }
res.send(JSON.stringify(response.body));
});
기본 인증을 수행하려는 경우:
superagent.get('https://your.service.org?query=xxxx')
.auth('the_username', 'the_password')
.end((err, response) => {
if (err) { return console.log(err); }
res.send(JSON.stringify(response.body));
});
참조:
저는 웹 서비스 전화를 할 때 레슬러를 사용해왔고, 매력적으로 작동하고 꽤 깔끔합니다.
최신 비동기/대기 기능을 사용하려면 다음과 같이 하십시오.
https://www.npmjs.com/package/request-promise-native
npm install --save request
npm install --save request-promise-native
//코드
async function getData (){
try{
var rp = require ('request-promise-native');
var options = {
uri:'https://reqres.in/api/users/2',
json:true
};
var response = await rp(options);
return response;
}catch(error){
throw error;
}
}
try{
console.log(getData());
}catch(error){
console.log(error);
}
경고:2020년 2월 11일자로 요청이 완전히 폐지되었습니다.
하나의 다른 예 - 당신은 그것을 위해 요청 모듈을 설치해야 합니다.
var request = require('request');
function get_trustyou(trust_you_id, callback) {
var options = {
uri : 'https://api.trustyou.com/hotels/'+trust_you_id+'/seal.json',
method : 'GET'
};
var res = '';
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
res = body;
}
else {
res = 'Not Found';
}
callback(res);
});
}
get_trustyou("674fa44c-1fbd-4275-aa72-a20f262372cd", function(resp){
console.log(resp);
});
const http = require('http');
const url = process.argv[2];
http.get(url, function(response) {
let finalData = "";
response.on("data", function (data) {
finalData += data.toString();
});
response.on("end", function() {
console.log(finalData.length);
console.log(finalData.toString());
});
});
나는 cURL이 있는 것을 찾지 못해서 node-libcurl 주변에 래퍼를 썼고 https://www.npmjs.com/package/vps-rest-client 에서 찾을 수 있습니다.
POST를 수행하는 방법은 다음과 같습니다.
var host = 'https://api.budgetvm.com/v2/dns/record';
var key = 'some___key';
var domain_id = 'some___id';
var rest = require('vps-rest-client');
var client = rest.createClient(key, {
verbose: false
});
var post = {
domain: domain_id,
record: 'test.example.net',
type: 'A',
content: '111.111.111.111'
};
client.post(host, post).then(function(resp) {
console.info(resp);
if (resp.success === true) {
// some action
}
client.close();
}).catch((err) => console.info(err));
Node.js 4.4+를 사용하는 경우 reqclient를 확인하여 cURL 형식으로 요청을 기록할 수 있으므로 애플리케이션 외부에서 쉽게 호출을 확인하고 재생성할 수 있습니다.
단순한 콜백을 전달하는 대신 Promise 개체를 반환하므로 보다 "패션" 방식으로 결과를 처리하고, 결과를 쉽게 연결하며, 표준 방식으로 오류를 처리할 수 있습니다.또한 기본 URL, 제한 시간, 내용 유형 형식, 기본 헤더, URL의 매개 변수 및 쿼리 바인딩, 기본 캐시 기능 등 각 요청에 대한 많은 상용 구성을 제거합니다.
다음은 컬 스타일로 초기화하고, 통화하고, 작업을 기록하는 방법의 예입니다.
var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
baseUrl:"http://baseurl.com/api/", debugRequest:true, debugResponse:true});
client.post("client/orders", {"client": 1234, "ref_id": "A987"},{"x-token": "AFF01XX"});
콘솔에 로그인합니다...
[Requesting client/orders]-> -X POST http://baseurl.com/api/client/orders -d '{"client": 1234, "ref_id": "A987"}' -H '{"x-token": "AFF01XX"}' -H Content-Type:application/json
그리고 응답이 반환되면...
[Response client/orders]<- Status 200 - {"orderId": 1320934}
다음은 Promise 개체를 사용하여 응답을 처리하는 방법의 예입니다.
client.get("reports/clients")
.then(function(response) {
// Do something with the result
}).catch(console.error); // In case of error ...
다음과 같이 할 수 .npm install reqclient
.
curl request를 사용하여 원하는 요청 시간을 쉽게 설정할 수 있습니다.옵션의 헤더를 설정하여 브라우저 호출을 "가짜"할 수도 있습니다.
경고:2020년 2월 11일자로 요청이 완전히 폐지되었습니다.
폼 데이터를 사용하여 구현하는 경우 자세한 내용은 https://tanaikech.github.io/2017/07/27/multipart-post-request-using-node.js) :
var fs = require('fs');
var request = require('request');
request.post({
url: 'https://slack.com/api/files.upload',
formData: {
file: fs.createReadStream('sample.zip'),
token: '### access token ###',
filetype: 'zip',
filename: 'samplefilename',
channels: 'sample',
title: 'sampletitle',
},
}, function (error, response, body) {
console.log(body);
});
슈퍼에이전트가 정말 유용하다는 것을 알게 되었습니다. 예를 들어 매우 간단합니다.
const superagent=require('superagent')
superagent
.get('google.com')
.set('Authorization','Authorization object')
.set('Accept','application/json')
2022년 이후 업데이트:
의 node 사용 가능한 node.js 파일 v18을 할 수 .fetch
API(https://nodejs.org/en/blog/announcements/v18-release-announce/) 참조)
공지사항 페이지에는 다음과 같은 사용 예도 포함되어 있습니다.
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
언급URL : https://stackoverflow.com/questions/5643321/how-to-make-remote-rest-call-inside-node-js-any-curl
'programing' 카테고리의 다른 글
PostgreSQL에서 읽기 전용 사용자를 어떻게 생성합니까? (0) | 2023.05.26 |
---|---|
postgresql 세션/연결 종료 (0) | 2023.05.26 |
UIViewController의 보기가 표시되는지 확인하는 방법 (0) | 2023.05.26 |
Postgre 복사 중SQL 데이터베이스를 다른 서버로 (0) | 2023.05.26 |
없음을 암시하는 파이썬 3타입? (0) | 2023.05.26 |