回答:
完全な例については、HTTPモジュールのドキュメントを参照してください。
https://nodejs.org/api/http.html#http_http_request_options_callback
request.js
github.com/mikeal/request
cURL
コマンドをnode.jsリクエストに変換できます: curl.trillworks.com/#node
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();
request
- npmjs.com/package/request -とupvote Nitishの答え、以下、2018年でより良い答えです
リクエストモジュールを簡単に使用できます:
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
死んでいるように見えるので、私はそれをforkし、名前を変更して、よりカールのようになり、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 ) );
また、プロジェクトは現在安定しています!
node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuild
ステップ中です。何かご意見は?
$ apt-get install libcurl4-openssl-dev
-L
どういうわけかオプションを使用できますか?
curl.setOpt( 'FOLLOWLOCATION', true );
。ところで、そのような質問は、このコメントセクションよりも課題追跡に適しています。;)
新しいプロジェクトの場合、リクエストは使用しないでください。プロジェクトはマイテナンスモードになり、最終的には廃止される予定です。
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)
}
私は通常REQUESTを使用します。REQUESTはNode.js用のシンプルですが強力なHTTPクライアントです
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.
}
})
上記の例は機能しますが、実際の例(つまり、複数のチャンクで受信するデータを処理する場合)を実際に扱うことはしません。確認する必要があることの1つは、データを配列にプッシュし(JSでこれを行う最速の方法)、それらをすべて結合する「オンエンド」ハンドラーでデータを返すことができます。
これは、大きなリクエスト(5000行以上)を処理していて、サーバーが大量のデータを送信する場合に特に必要です。
これは私のプログラム(coffeescript)の例です:https ://gist.github.com/1105888
リクエストのようなカールを作成する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 curlrequest
リクエスト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ロガーモジュールまたは単純なconsole.logを使用して、アプリケーションを次のように実行します
npm start output.txt
上記のコマンドの結果は、console.logに出力したすべてのデータを含む1つのtxtファイルをルートに生成します
ついに、grunt-shellライブラリを使用することになりました。
EdgeCast APIの使用を考えている他の人のための、完全に実装されたGruntタスクのソースの要点を次に示します。私の例では、CDNを消去するcurlコマンドを実行するためにgrunt-shellを使用していることがわかります。
これは、Node内でHTTPリクエストを機能させるために何時間も費やした後で終わったということです。RubyとPythonで動作させることはできましたが、このプロジェクトの要件を満たしていませんでした。
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
。
IOST RaspberryPiから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データベース/サーバーの場所(単純な無料のCloudant DBを使用しました)--userは認証部分のユーザー名です:pass APIパスを介して入力しました-Xは呼び出すコマンドを定義します(PUT、GET、POST、DELETE)-Hコンテンツタイプ-Cloudantは、JSONが使用されるドキュメントデータベースに関するものです-データコンテンツ自体がJSONとしてソートされます
リクエストnpmモジュールリクエストノードモールデは使用するのに適しています。リクエスト/取得リクエストのオプション設定に加えて、本番環境でも広く使用されています。
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.
});
http.request
...