Saya mencari untuk menggunakan informasi dari permintaan HTTP menggunakan Node.js (mis. Panggil layanan web jarak jauh dan gema respons ke klien).
Dalam PHP saya akan menggunakan cURL untuk melakukan ini. Apa praktik terbaik di Node?
Saya mencari untuk menggunakan informasi dari permintaan HTTP menggunakan Node.js (mis. Panggil layanan web jarak jauh dan gema respons ke klien).
Dalam PHP saya akan menggunakan cURL untuk melakukan ini. Apa praktik terbaik di Node?
Jawaban:
Lihat dokumentasi untuk modul HTTP untuk contoh lengkap:
https://nodejs.org/api/http.html#http_http_request_options_callback
request.js
github.com/mikeal/request
cURL
perintah Anda menjadi permintaan node.js: curl.trillworks.com/#node
The http
modul yang Anda gunakan untuk menjalankan server juga digunakan untuk membuat permintaan terpencil.
Inilah contoh dalam dokumen mereka:
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 - dan pilih jawaban Nitish, di bawah, yang merupakan jawaban yang lebih baik pada tahun 2018.
Anda dapat dengan mudah menggunakan modul permintaan:
https://www.npmjs.com/package/request
Kode sampel:
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)
}
})
Karena sepertinya node-curl
sudah mati, saya telah memotongnya, berganti nama, dan dimodifikasi agar lebih seperti ikal dan untuk dikompilasi di bawah Windows.
Contoh penggunaan:
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();
Perform adalah async, dan tidak ada cara untuk menggunakannya secara sinkron saat ini (dan mungkin tidak akan pernah ada).
Itu masih dalam alpha, tetapi ini akan segera berubah, dan bantuan sangat dihargai.
Sekarang dimungkinkan untuk menggunakan Easy
pegangan secara langsung untuk permintaan sinkronisasi, contoh:
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 ) );
Juga, proyeknya stabil sekarang!
node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuild
langkah. Adakah pikiran?
$ apt-get install libcurl4-openssl-dev
-L
opsi ini?
curl.setOpt( 'FOLLOWLOCATION', true );
. Btw, pertanyaan seperti itu lebih cocok untuk pelacak masalah daripada bagian komentar ini. ;)
Untuk proyek baru, harap jangan menggunakan permintaan, karena sekarang proyek dalam mode maitainance, dan pada akhirnya akan usang
https://github.com/request/request/issues/3142
Alih-alih saya akan merekomendasikan Axios , perpustakaan ini sejalan dengan Node standar terbaru, dan ada beberapa plugin yang tersedia untuk meningkatkannya, memungkinkan tanggapan server tiruan, coba ulang otomatis dan fitur lainnya.
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
});
Atau menggunakan async / tunggu:
try{
const response = await axios.get('/user?ID=12345');
console.log(response)
} catch(axiosErr){
console.log(axiosErr)
}
Saya biasanya menggunakan REQUEST, ini klien HTTP yang disederhanakan tetapi kuat untuk Node.js
https://github.com/request/request
Di NPM
npm install request
Berikut ini adalah contoh penggunaan:
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.
}
})
nah kalau kamu benar-benar membutuhkan ikal yang setara kamu bisa coba node-curl
npm install node-curl
Anda mungkin perlu menambahkan libcurl4-gnutls-dev
.
Contoh-contoh di atas bekerja tetapi jangan sampai benar-benar berurusan dengan contoh dunia nyata (yaitu ketika Anda memproses data yang datang dalam beberapa potongan. Satu hal yang perlu Anda pastikan adalah bahwa Anda memiliki penangan 'on chunk' yang dorong data ke dalam array (cara tercepat untuk melakukan ini di JS) dan penangan 'on-end' yang menggabungkan semuanya jadi Anda bisa mengembalikannya.
Ini sangat diperlukan ketika Anda bekerja dengan permintaan besar (5000+ baris) dan server mengirimkan banyak data kepada Anda.
Berikut ini contoh di salah satu program saya (coffeescript): https://gist.github.com/1105888
Bagaimana misalnya, https://github.com/joyent/node/wiki/modules#wiki-tcp . Ringkasan yang sangat cepat =>
Ada modul npm untuk membuat permintaan seperti ikal npm curlrequest
,.
Langkah 1: $npm i -S curlrequest
Langkah 2: Di file simpul Anda
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
})
Untuk membaca dan memahami lebih lanjut, npm curlrequest
Gunakan modul permintaan npm dan setelah panggilan
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.
});
Untuk praktik terbaik juga gunakan beberapa modul winston logger atau console.log sederhana dan kemudian jalankan aplikasi Anda seperti
npm start output.txt
Hasil dari perintah di atas akan menghasilkan satu file txt di root dengan semua data yang telah Anda cetak di console.log
Saya akhirnya menggunakan perpustakaan grunt-shell .
Inilah inti sumber saya untuk tugas Grunt yang diimplementasikan sepenuhnya untuk siapa pun yang berpikir untuk bekerja dengan EdgeCast API. Anda akan menemukan dalam contoh saya bahwa saya menggunakan grunt-shell untuk menjalankan perintah curl yang membersihkan CDN.
Ini yang akhirnya saya lakukan setelah menghabiskan berjam-jam mencoba untuk mendapatkan permintaan HTTP untuk bekerja dalam Node. Saya bisa mendapatkan satu yang berfungsi di Ruby dan Python, tetapi tidak memenuhi persyaratan proyek ini.
Menggunakan reqclient , ini adalah modul klien kecil request
yang memungkinkan Anda untuk mencatat semua aktivitas dengan gaya cURL (opsional, untuk lingkungan pengembangan). Juga memiliki fitur-fitur bagus seperti penguraian URL dan parameter, integrasi otentikasi, dukungan cache, dll.
Misalnya, jika Anda membuat objek klien, lakukan permintaan:
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"}})
Ini akan masuk dalam konsol seperti ini:
[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}
Permintaan akan mengembalikan objek Janji , jadi Anda harus menangani then
dan catch
apa yang harus dilakukan dengan hasilnya.
reqclient
tersedia dengan NPM , Anda dapat menginstal modul dengan: npm install reqclient
.
Saya punya masalah mengirim data POST ke cloud DB dari IOT RaspberryPi, tetapi setelah berjam-jam saya berhasil meluruskannya.
Saya menggunakan command prompt untuk melakukannya.
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"}'
Command prompt akan menunjukkan masalah - nama pengguna / pass salah; permintaan buruk dll
--URL basis data / lokasi server (Saya menggunakan DB Cloudant gratis sederhana) --user adalah bagian otentikasi nama pengguna: pass yang saya masukkan melalui API pass -X mendefinisikan perintah untuk memanggil apa (PUT, GET, POST, DELETE) -H tipe konten - Cloudant adalah tentang basis data dokumen, di mana JSON digunakan - konten data itu sendiri diurutkan sebagai JSON
Request npm module Request node moulde baik untuk digunakan, ia memiliki opsi pengaturan untuk mendapatkan / mengirim permintaan plus itu banyak digunakan dalam lingkungan produksi juga.
Anda mungkin ingin mencoba menggunakan sesuatu seperti ini
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'));
});
Anda dapat menggunakan modul permintaan npm. Sangat mudah digunakan. Permintaan dirancang untuk menjadi cara paling sederhana untuk melakukan panggilan http. Ini mendukung HTTPS dan mengikuti pengalihan secara default.
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
...