[curl] Node.js에서 cURL이 동일합니까?

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에서 더 컬되고 컴파일되도록 수정했습니다.

node-libcurl

사용 예 :

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