Node.js에서 cURL에 해당합니까?
Node.js를 사용하여 HTTP 요청의 정보를 사용하려고 합니다(즉, 원격 웹 서비스를 호출하고 클라이언트에 응답을 에코합니다).
PHP에서 나는 cURL을 사용해서 이것을 했을 것입니다.노드에서 가장 좋은 방법은 무엇입니까?
전체 예시는 HTTP 모듈에 대한 설명서를 참조하십시오.
https://nodejs.org/api/http.html#http_http_request_options_callback
서버를 실행하는 데 사용하는 모듈은 원격 요청에도 사용됩니다.
문서의 예는 다음과 같습니다.
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)
}
})
죽은 것처럼 보이기 때문에 포크를 넣고 이름을 바꾸고 좀 더 컬(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 ) );
또한, 프로젝트는 현재 안정적입니다!
편집:
새 프로젝트의 경우 프로젝트가 유지 보수 모드이므로 요청을 사용하지 마십시오. 프로젝트는 결국 사용되지 않습니다.
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
});
또는 비동기 / wait를 사용하는 경우:
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.
}
})
컬에 해당하는 것이 정말 필요하다면 시도해 볼 수 있습니다.
npm install node-curl
당신은 아마도 추가할 필요가 있을 것입니다.libcurl4-gnutls-dev
.
위의 예들은 작동하지만 실제 세계의 예(즉, 여러 청크로 들어오는 데이터를 처리할 때)를 실제로 다루지는 못합니다.한 가지 확실하게 해야 할 것은 데이터를 배열로 밀어 넣는 'on chunk' 핸들러와 이들을 모두 결합하여 반환할 수 있도록 하는 'on end' 핸들러가 있다는 것입니다.
특히 대용량 요청(5000회선 이상)을 처리할 때 서버에서 많은 데이터를 전송할 때 필요합니다.
제 프로그램(커피 스크립트) 중 하나인 https://gist.github.com/1105888 의 예를 들어보겠습니다.
예를 들어 https://github.com/joyent/node/wiki/modules#wiki-tcp 같은 경우는 어떻습니까?아주 빠른 요약 =>
Node.js 18에서 직접 사용할 수 있습니다.
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
curl like request 를 npm .npm curlrequest
.
1 :$npm i -S curlrequest
2단계: 노드 파일에서
let curl = require('curlrequest')
let options = {} // url, method, data, timeout,data, etc can be passed as options
curl.request(options,(err,response)=>{
// err is the error returned from the api
// response contains the data returned from the api
})
자세한 읽기 및 이해를 위해 npm curl request.
여기 표준 lib()가 있습니다.http
) 비동기 / wait 솔루션입니다.
const http = require("http");
const fetch = async (url) => {
return new Promise((resolve, reject) => {
http
.get(url, (resp) => {
let data = "";
resp.on("data", (chunk) => {
data += chunk;
});
resp.on("end", () => {
resolve(data);
});
})
.on("error", (err) => {
reject(err);
});
});
};
용도:
await fetch("http://example.com");
요청 npm 모듈 및 애프터콜 사용
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
모범 사례를 위해 winston logger module 또는 simple console.log를 사용하고 다음과 같이 응용 프로그램을 실행합니다.
npm start output.txt
위 명령의 결과는 console.log에서 출력한 모든 데이터와 함께 txt 파일 하나를 루트 상에서 생성합니다.
reqclient를 사용합니다. 위에 있는 작은 클라이언트 모듈입니다.request
모든 액티비티를 cURL 스타일(개발 환경의 경우 옵션)로 기록할 수 있습니다.또한 URL 및 매개 변수 구문 분석, 인증 통합, 캐시 지원 등과 같은 좋은 기능을 갖추고 있습니다.
예를 들어 클라이언트 개체를 만들고 요청을 수행하는 경우:
var RequestClient = require("reqclient").RequestClient;
var client = new RequestClient({
baseUrl:"http://baseurl.com/api/v1.1",
debugRequest:true, debugResponse:true
});
var resp = client.post("client/orders", {"client":1234,"ref_id":"A987"}, {headers: {"x-token":"AFF01XX"}})
다음과 같이 콘솔에 기록됩니다.
[Requesting client/orders]-> -X POST http://baseurl.com/api/v1.1/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 개체를 반환하므로 사용자는 다음과 같이 처리해야 합니다.then
그리고.catch
결과를 어떻게 할 것인지.
reqclient
는 npm 과 함께 사용할 수 있습니다. 모듈은 다음과 같이 설치할 수 있습니다.npm install reqclient
.
나는 결국 grunt-shell 라이브러리를 사용하게 되었습니다.
EdgeCast API로 작업할 생각을 하고 있는 다른 사람들을 위해 완전히 구현된 Grunt 작업에 대한 나의 출처 요지는 다음과 같습니다.제 예를 보시면 제가 grunt-shell을 사용해서 CDN을 제거하는 curl 명령을 실행하는 것을 보실 수 있습니다.
이것은 노드 내에서 작동하기 위해 HTTP 요청을 받기 위해 몇 시간 동안 노력한 끝에 결국 끝이 났습니다.루비와 파이썬에서 작업할 수 있었지만, 이 프로젝트의 요구 사항을 충족하지 못했습니다.
당신은 당신의 요청에 POSTMAN Chrome 앱을 사용해 볼 수 있고 거기서 노드 js 코드를 생성할 수 있습니다.
IOT Raspberry Pi에서 POST 데이터를 클라우드 DB로 전송하는 데 문제가 있었지만 몇 시간이 지난 후에야 겨우 해결할 수 있었습니다.
명령 프롬프트를 사용해서 그렇게 했습니다.
sudo curl --URL http://<username>.cloudant.com/<database_name> --user <api_key>:<pass_key> -X POST -H "Content-Type:application/json" --data '{"id":"123","type":"987"}'
명령 프롬프트에 잘못된 사용자 이름/패스, 잘못된 요청 등의 문제가 표시됩니다.
--URL database/server location (간단한 무료 Cloudant DB 사용) --user는 인증 부분 사용자 이름입니다:API pass를 통해 입력한 pass -X는 호출할 명령을 정의합니다 (PUT,GET,POST,DELETE) -H content type -Cloudant는 문서 데이터베이스에 관한 것으로, 여기서 JSON이 사용됩니다 --Data content 자체가 JSON으로 분류됩니다.
Request npm module Request node molde는 사용하기 좋습니다. get/post request에 대한 옵션 설정이 있고 프로덕션 환경에서도 널리 사용됩니다.
request npm module을 사용하시면 됩니다.사용하기 매우 간단합니다.요청은 http 통화를 할 수 있는 가장 간단한 방법으로 설계되었습니다.HTTPS를 지원하며 기본적으로 리디렉션을 따릅니다.
var request = require('request');
request('http://www.google.com', function (error, response, body) {
console.log('error:', error); // Print the error if one occurred
console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
console.log('body:', body); // Print the HTML for the Google homepage.
});
당신은 이런 것을 사용하는 것을 시도해 보는 것입니다.
curl = require('node-curl');
curl('www.google.com', function(err) {
console.info(this.status);
console.info('-----');
console.info(this.body);
console.info('-----');
console.info(this.info('SIZE_DOWNLOAD'));
});
정말 cURL 요청으로 처리하고 싶다면 한 가지 생각입니다(즉,페이지가 뜨는지 안 뜨는지 확인하고 싶을 뿐입니다. (@Glen Thompson 답변에서 편집):
const http = require("http");
function isSiteUp(url) {
return new Promise((resolve, reject) => {
http.get(url, (res) => {
if (!err && res.statusCode == 200) {
resolve(true);
} else {
console.log(err);
resolve(false);
}
})
.on("error", (err) => {
reject(err);
});
});
}
언급URL : https://stackoverflow.com/questions/6819143/curl-equivalent-in-node-js
'code' 카테고리의 다른 글
_일부 필드에만 Enter 키를 사용하여 양식 제출을 사용하지 않도록 설정합니다. (0) | 2023.10.30 |
---|---|
사용자 지정 속성에 대한 클라이언트 측 유효성 검사 수행 (0) | 2023.10.30 |
클로저 XML 구문 분석 (0) | 2023.10.30 |
각도 4에서 Excel로 내보내기 (0) | 2023.10.25 |
MySQL 업데이트/직렬 데이터 손상 없이 교체 (0) | 2023.10.25 |