Closed Cmcampos86 closed 3 years ago
oi @Cmcampos86 qual o seu sistema operacional?
O comando curl
realiza chamadas http e para isso aceita alguns argumentos.
Ex: Para fazer um GET na Home do google:
$ curl http://www.google.com.br
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" ....
você verá que o resultado será o HTML dessa página. Se você quiser ver apenas os cabeçalhos:
$ curl --head http://www.google.com.br
HTTP/1.1 200 OK
Date: Fri, 19 Aug 2016 20:00:05 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: NID=84=TpwVRxVRKPCqh3K2c5ielTIIPmzxDnxvvk7yqvJ87WZomOu1HyH3REX2jcB9YMXUowBM7_15m5bHlGR7vLdmTaM0_a1dVdfutGyJi6owCkZDXeBRVAw2PLwUI61Fb2nu; expires=Sat, 18-Feb-2017 20:00:05 GMT; path=/; domain=.google.com.br; HttpOnly
Transfer-Encoding: chunked
Accept-Ranges: none
Vary: Accept-Encoding
Podemos também informar cabeçalhos na requisição com -H e informar qual método HTTP vamos usar com -X, lembrando que para enviar dados usamos -d. Então para fazer um POST, enviando o cabeçalho informando que vamos enviar um JSON, usamos o seguinte:
curl -X POST http://localhost:3000 -H 'Content-Type: application/json' -d '{"password":1138}'
Então:
-X POST informa que vamos enviar um HTTP com o método POST
-H 'Content-Type: application/json' informa que a requisição é do tipo json
-d '{"password":1138}' envia data
(corpo da requisição) como JSON
http://localhost:3000 é a URL que queremos chamar
Estou usando o Windows 7.
Criei um servidor HTTP, por exemplo o localhost:3000. Minha dúvida é... ao digitar o comando
curl -X POST http://localhost:3000 -H 'Content-Type: application/json' -d '{"password":1138}'
no terminal, como a informação do JSON {"password":1138}' vai ser mostrada? Terei que fazer algum Jquery pra obter isso?
a informação do JSON vai chegar lá na sua rota do Express:
app.post('/', function(request, response, next) {
console.log('body', request.body); // vai chegar aqui o {"password":1138}
console.log(request.body.password); // 1138
response.send('OK!!');
});
com jQuery seria assim:
jQuery
.post('/', { password: 1138 })
.then(function(data) {
console.log(data)
});
ali no console.log(data)
do jQuery, você vai receber o OK!!
que o Express respondeu.
Haaaaaa legal!
Agora entendi!
Muito obrigado pelo exemplo!
wbruno bom dia!
Fiz um teste ontem referente ao exemplo. A linha "console.log('body', request.body);" me retornou certinho o contéudo json (body { '\'{password:1138}\'': '' }), mas a linha console.log(request.body.password); me retornou undefined.
Usei o código abaixo para fazer o servidor HTTP:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({
extended: true
}));
app.post('/', function(request, response, next) {
console.log('body', request.body); // vai chegar aqui o {"password":1138}
console.log(request.body.password); // 1138
response.send('OK!!');
});
app.listen(3000);
console.log('Server running at http://127.0.0.1.:3000/');
E aqui utilizei o curl:
curl -X POST http://localhost:3000 -H 'Content-Type: application/json' -d '{"password":1138}'
Não obtive nenhum erro, a questão foi que o request.body.password retornou undefined.
Será necessário fazer alguma outra coisa para obter o valor de password?
mudaram algumas coisas no bodyParser, troca:
app.use(bodyParser.urlencoded({
extended: true
}));
por:
app.use(bodyParser());
Eu troquei pelo app.use(bodyParser()); e apareceu a mensagem abaixo:
body-parser deprecated bodyParser: use individual json/urlencoded middlewares
Isso não impediu de executar, mas continua como undefined a linha "console.log(request.body.password);" e a linha "console.log(request.body);" continua com o conteúdo json (body { '\'{password:1138}\'': '' })
Resolvi!
O problema estava na forma que o cabeçalho estava sendo passado no curl. Debugando eu vi que o cabeçalho no Nodejs não estava como Json sendo que eu tinha passado no curl
No comando cURL eu acrescentei um -i antes do -H:
curl -X POST http://localhost:3000 -i -H 'Content-Type: application/json' -d '{"password":1138}'
Ai o resultado apareceu certinho no console.log(request.body); e no console.log(request.body.password);
Obrigado pela ajuda!
Boa tarde William!
Estou no capítulo 3 do seu livro e estou com dificuldade de executar os comandos referente a parte 3.5 Testando a requisição com curl.
Poderia me passar um exemplo um pouco mais detalhado de como funciona?