Node.js를 사용하여 HTTP 요청의 정보를 사용하려고합니다 (즉, 원격 웹 서비스를 호출하고 클라이언트에 응답을 에코합니다).
PHP에서는 cURL을 사용 하여이 작업을 수행했을 것입니다. 노드에서 가장 좋은 방법은 무엇입니까?
답변
전체 예는 HTTP 모듈 설명서를 참조하십시오.
https://nodejs.org/api/http.html#http_http_request_options_callback
답변
http
당신은 서버를 실행하는 데 사용하는 모듈은 원격 요청을 만드는 데 사용됩니다.
다음은 해당 문서의 예입니다.
var http = require("http");
var options = {
host: 'www.google.com',
port: 80,
path: '/upload',
method: 'POST'
};
var req = 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);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
답변
요청 모듈을 쉽게 사용할 수 있습니다.
https://www.npmjs.com/package/request
샘플 코드 :
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
else {
console.log("Error "+response.statusCode)
}
})
답변
겉 모습 node-curl
이 죽었 기 때문에 나는 그것을 포크하고 이름을 바꾸고 Windows에서 더 컬되고 컴파일되도록 수정했습니다.
사용 예 :
var Curl = require( 'node-libcurl' ).Curl;
var curl = new Curl();
curl.setOpt( Curl.option.URL, 'www.google.com' );
curl.setOpt( 'FOLLOWLOCATION', true );
curl.on( 'end', function( statusCode, body, headers ) {
console.info( statusCode );
console.info( '---' );
console.info( body.length );
console.info( '---' );
console.info( headers );
console.info( '---' );
console.info( this.getInfo( Curl.info.TOTAL_TIME ) );
this.close();
});
curl.on( 'error', function( err, curlErrorCode ) {
console.error( err.message );
console.error( '---' );
console.error( curlErrorCode );
this.close();
});
curl.perform();
수행은 비동기 적이며 현재 동 기적으로 사용할 수있는 방법이 없습니다 (아마도 없을 것입니다).
아직 알파 상태이지만 곧 변경 될 예정이며 도움을 주시면 감사하겠습니다.
이제 Easy
동기화 요청에 직접 핸들 을 사용할 수 있습니다 (예 :
var Easy = require( 'node-libcurl' ).Easy,
Curl = require( 'node-libcurl' ).Curl,
url = process.argv[2] || 'http://www.google.com',
ret, ch;
ch = new Easy();
ch.setOpt( Curl.option.URL, url );
ch.setOpt( Curl.option.HEADERFUNCTION, function( buf, size, nmemb ) {
console.log( buf );
return size * nmemb;
});
ch.setOpt( Curl.option.WRITEFUNCTION, function( buf, size, nmemb ) {
console.log( arguments );
return size * nmemb;
});
// this call is sync!
ret = ch.perform();
ch.close();
console.log( ret, ret == Curl.code.CURLE_OK, Easy.strError( ret ) );
또한 프로젝트는 안정적입니다!
답변
편집하다:
새 프로젝트의 경우 요청을 사용하지 마십시오. 프로젝트는 maitainance 모드에 있으며 결국 폐기 될 예정입니다.
https://github.com/request/request/issues/3142
대신 Axios를 추천 하고 라이브러리는 Node 최신 표준에 부합하며이를 향상시킬 수있는 플러그인이있어 모의 서버 응답, 자동 재시도 및 기타 기능을 사용할 수 있습니다.
https://github.com/axios/axios
const axios = require('axios');
// Make a request for a user with a given ID
axios.get('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
.then(function () {
// always executed
});
또는 async / await 사용 :
try{
const response = await axios.get('/user?ID=12345');
console.log(response)
} catch(axiosErr){
console.log(axiosErr)
}
나는 보통 Node.js를위한 간단하지만 강력한 HTTP 클라이언트 인 REQUEST를 사용합니다.
https://github.com/request/request
NPM에
npm install request
사용 예는 다음과 같습니다.
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // Show the HTML for the Google homepage.
}
})
답변
당신이 정말로 컬 동등한 것을 필요로한다면 당신은 시도 할 수 있습니다 node-curl
npm install node-curl
아마 추가해야 할 것입니다 libcurl4-gnutls-dev
.
답변
위의 예제는 실제로 작동하지만 실제 예제를 다루기에는 충분하지 않습니다 (예 : 여러 청크로 들어오는 데이터를 처리 할 때). 데이터를 배열 (JS 에서이 작업을 수행하는 가장 빠른 방법)에 푸시하고 데이터를 모두 결합하여 반환 할 수있는 ‘종료’처리기로 푸시하십시오.
이는 큰 요청 (5000 줄 이상)으로 작업하고 서버가 많은 데이터를 전송하는 경우에 특히 필요합니다.
내 프로그램 (커피 스크립트) 중 하나의 예는 다음과 같습니다.
https://gist.github.com/1105888