Eu estou olhando para usar informações de uma solicitação HTTP usando Node.js (ou seja, chamar um serviço da Web remoto e ecoar a resposta ao cliente).
No PHP, eu teria usado o cURL para fazer isso. Qual é a melhor prática no Node?
Aslo importante ressaltar que há um muito popular biblioteca wrapper request.jsgithub.com/mikeal/request
Farzher
2
solicitação http e assíncrona, ondulação é sincronização.
e-info128
2
@WHK tal é a natureza da node.js
slifty
O grande problema que vejo com isso é que você não pode simplesmente inserir a URL e obter resposta. Você precisa separar o URL em unidades para solicitá-lo. Mas, por maldição, provavelmente existe uma maneira, seria mais conveniente usar um comando curl like para isso.
Esse nível é muito baixo comparado ao comportamento de ondulação solicitado pelo OP.
Dan Dascalescu 27/02
1
Para Todos: Hoje em dia, o uso request- npmjs.com/package/request - e upvote resposta de Nitish, abaixo, qual é a melhor resposta em 2018.
Dan Nissenbaum
Bem-vindo à realidade: a solicitação foi descontinuada, consulte github.com/request/request/issues/3142 Parece-me que a operação "de baixo nível" tem mais potencial do que isso, porque não é nada baixa, é BASIC
vintproykt
35
você pode facilmente usar o módulo de solicitação:
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)}})
Tentei instalar o node-curl e o node-libcurl, mas ambos me deram a mesma mensagem: "Não é possível encontrar o arquivo de cabeçalho do curl". Isso é durante a node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuildetapa. Alguma ideia?
SaganRitual 5/05
@GreatBigBore, você precisa do pacote libcurl devel instalado em sua máquina. Se você estiver usando o debian, por exemplo, poderá instalá-lo com$ apt-get install libcurl4-openssl-dev
JCM
1
você pode usar a -Lopção de alguma forma?
Corvid #
2
Sim: CURLOPT_FOLLOWLOCATION , com o node-libcurl você usará curl.setOpt( 'FOLLOWLOCATION', true );. Aliás, perguntas como essa são mais adequadas ao rastreador de problemas do que esta seção de comentários. ;)
JCM 10/10
23
EDITAR:
Para novos projetos, evite usar a solicitação, pois agora o projeto está no modo de manutenção e, eventualmente, será preterido
Em vez disso, eu recomendaria o Axios , a biblioteca está alinhada com os padrões mais recentes do Node e existem alguns plug-ins disponíveis para aprimorá-lo, permitindo respostas falsas ao servidor, novas tentativas automáticas e outros recursos.
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});
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.}})
Os exemplos acima funcionam, mas não chegam ao ponto de realmente lidar com um exemplo do mundo real (ou seja, quando você processa dados que vêm em vários pedaços. É preciso ter certeza de que você tem um manipulador 'on chunk' que envie os dados para uma matriz (a maneira mais rápida de fazer isso em JS) e um manipulador 'on end' que os une para que você possa devolvê-los.
Isso é especialmente necessário quando você está trabalhando com grandes solicitações (mais de 5000 linhas) e o servidor envia muitos dados para você.
Existe um módulo npm para fazer uma solicitação de ondulação npm curlrequest,.
Passo 1: $npm i -S curlrequest
Etapa 2: no seu arquivo de nó
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})
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.});
Para práticas recomendadas, use também o módulo winston logger ou o console.log simples e, em seguida, execute seu aplicativo como
npm start output.txt
O resultado do comando acima gerará um arquivo txt na raiz com todos os dados que você imprimiu no console.log
Aqui está minha essência da fonte da minha tarefa Grunt totalmente implementada para qualquer pessoa que esteja pensando em trabalhar com a API EdgeCast. Você encontrará no meu exemplo que eu uso um grunt-shell para executar o comando curl que limpa a CDN.
Foi com isso que acabei depois de passar horas tentando obter uma solicitação HTTP para trabalhar no Node. Consegui conseguir um trabalhando em Ruby e Python, mas não atendi aos requisitos deste projeto.
Utiliza reqclient , é um pequeno módulo de cliente requestque permite registrar toda a atividade com o estilo cURL (opcional, para ambientes de desenvolvimento). Também possui recursos interessantes, como análise de URL e parâmetros, integrações de autenticação, suporte a cache, etc.
Por exemplo, se você criar um objeto de cliente e fazer uma solicitação:
O prompt de comando mostrará os problemas - nome de usuário / senha incorretos; pedido ruim etc.
--URL banco de dados / localização do servidor (usei o Cloudant DB simples e gratuito) --user é o nome de usuário da parte de autenticação: passe que eu inseri através da API pass -X define o comando a ser chamado (PUT, GET, POST, DELETE) -H tipo de conteúdo - Cloudant é sobre banco de dados de documentos, onde o JSON é usado - conteúdo de dados em si, classificado como JSON
Request npm module O nó de requisição moulde é bom de usar, possui configurações de opções para solicitação de obtenção / publicação, além de ser amplamente utilizado no ambiente de produção.
Você pode usar o módulo request npm. Super simples de usar. A solicitação foi projetada para ser a maneira mais simples possível de fazer chamadas http. Ele suporta HTTPS e segue os redirecionamentos por padrão.
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
...Respostas:
Consulte a documentação do módulo HTTP para obter um exemplo completo:
https://nodejs.org/api/http.html#http_http_request_options_callback
fonte
request.js
github.com/mikeal/requestcURL
comando em node.js request: curl.trillworks.com/#nodeO
http
módulo que você usa para executar servidores também é usado para fazer solicitações remotas.Aqui está o exemplo em seus documentos:
fonte
request
- npmjs.com/package/request - e upvote resposta de Nitish, abaixo, qual é a melhor resposta em 2018.você pode facilmente usar o módulo de solicitação:
https://www.npmjs.com/package/request
Código de amostra:
fonte
Como parece que
node-curl
está morto, eu o bifurquei, renomeei e modifiquei para ser mais curvilíneo e compilar no Windows.node-libcurl
Exemplo de uso:
Perform é assíncrono
e não há como usá-lo síncrono atualmente (e provavelmente nunca o terá).Ainda está em alfa, mas isso vai mudar em breve, e a ajuda é apreciada.Agora é possível usar o
Easy
handle diretamente para solicitações de sincronização, por exemplo:Além disso, o projeto está estável agora!
fonte
node tools/retrieve-win-deps && node tools/generate-stubs && node-gyp rebuild
etapa. Alguma ideia?$ apt-get install libcurl4-openssl-dev
-L
opção de alguma forma?curl.setOpt( 'FOLLOWLOCATION', true );
. Aliás, perguntas como essa são mais adequadas ao rastreador de problemas do que esta seção de comentários. ;)EDITAR:
Para novos projetos, evite usar a solicitação, pois agora o projeto está no modo de manutenção e, eventualmente, será preterido
https://github.com/request/request/issues/3142
Em vez disso, eu recomendaria o Axios , a biblioteca está alinhada com os padrões mais recentes do Node e existem alguns plug-ins disponíveis para aprimorá-lo, permitindo respostas falsas ao servidor, novas tentativas automáticas e outros recursos.
https://github.com/axios/axios
Ou usando async / waitit:
Eu costumo usar REQUEST, é um cliente HTTP simplificado, porém poderoso, para o Node.js
https://github.com/request/request
É no NPM
npm install request
Aqui está uma amostra de uso:
fonte
bem, se você realmente precisa de um equivalente de onda, você pode tentar
node-curl
você provavelmente precisará adicionar
libcurl4-gnutls-dev
.fonte
Os exemplos acima funcionam, mas não chegam ao ponto de realmente lidar com um exemplo do mundo real (ou seja, quando você processa dados que vêm em vários pedaços. É preciso ter certeza de que você tem um manipulador 'on chunk' que envie os dados para uma matriz (a maneira mais rápida de fazer isso em JS) e um manipulador 'on end' que os une para que você possa devolvê-los.
Isso é especialmente necessário quando você está trabalhando com grandes solicitações (mais de 5000 linhas) e o servidor envia muitos dados para você.
Aqui está um exemplo em um dos meus programas (coffeescript): https://gist.github.com/1105888
fonte
Que tal, por exemplo, https://github.com/joyent/node/wiki/modules#wiki-tcp . Um resumo muito rápido =>
fonte
Existe um módulo npm para fazer uma solicitação de ondulação
npm curlrequest
,.Passo 1:
$npm i -S curlrequest
Etapa 2: no seu arquivo de nó
Para leitura e compreensão adicionais, npm curlrequest
fonte
Use o módulo request npm e após a chamada
Para práticas recomendadas, use também o módulo winston logger ou o console.log simples e, em seguida, execute seu aplicativo como
O resultado do comando acima gerará um arquivo txt na raiz com todos os dados que você imprimiu no console.log
fonte
Acabei usando a biblioteca grunt-shell .
Aqui está minha essência da fonte da minha tarefa Grunt totalmente implementada para qualquer pessoa que esteja pensando em trabalhar com a API EdgeCast. Você encontrará no meu exemplo que eu uso um grunt-shell para executar o comando curl que limpa a CDN.
Foi com isso que acabei depois de passar horas tentando obter uma solicitação HTTP para trabalhar no Node. Consegui conseguir um trabalhando em Ruby e Python, mas não atendi aos requisitos deste projeto.
fonte
Utiliza reqclient , é um pequeno módulo de cliente
request
que permite registrar toda a atividade com o estilo cURL (opcional, para ambientes de desenvolvimento). Também possui recursos interessantes, como análise de URL e parâmetros, integrações de autenticação, suporte a cache, etc.Por exemplo, se você criar um objeto de cliente e fazer uma solicitação:
Ele registrará no console algo como isto:
A solicitação retornará um objeto Promise , para que você tenha que lidar com
then
ecatch
o que fazer com o resultado.reqclient
está disponível com NPM , você pode instalar o módulo com:npm install reqclient
.fonte
Eu tive um problema ao enviar dados POST para o banco de dados em nuvem do IOT RaspberryPi, mas depois de horas eu consegui entender direito.
Eu usei o prompt de comando para fazer isso.
O prompt de comando mostrará os problemas - nome de usuário / senha incorretos; pedido ruim etc.
--URL banco de dados / localização do servidor (usei o Cloudant DB simples e gratuito) --user é o nome de usuário da parte de autenticação: passe que eu inseri através da API pass -X define o comando a ser chamado (PUT, GET, POST, DELETE) -H tipo de conteúdo - Cloudant é sobre banco de dados de documentos, onde o JSON é usado - conteúdo de dados em si, classificado como JSON
fonte
Request npm module O nó de requisição moulde é bom de usar, possui configurações de opções para solicitação de obtenção / publicação, além de ser amplamente utilizado no ambiente de produção.
fonte
Você pode tentar usar algo parecido com isto
fonte
Você pode tentar usar o aplicativo POSTMAN Chrome para sua solicitação e gerar o código js do nó a partir daí
fonte
Você pode usar o módulo request npm. Super simples de usar. A solicitação foi projetada para ser a maneira mais simples possível de fazer chamadas http. Ele suporta HTTPS e segue os redirecionamentos por padrão.
fonte