• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

123
Vistas
curl para buscar con indicador de resumen

Ha habido otras preguntas sobre el tema, pero nada parece funcionar para mí.
Tengo un CURL funcional, pero quiero traducirlo a JS (con Node).

RIZO

 curl --user "uername:pass" --digest \ --header "Content-Type: application/json" \ --include \ --request POST "https://cloud.mongodb.com/api/atlas/v1.0/groups/MY_GROUP/clusters/MY_CLUSTER/fts/indexes?pretty=true" \ --data '{ "collectionName": "collname", "database": "myDB", "mappings": { "dynamic": true }, "name": "default" }'

Respuesta

HTTP/2 401 www-authenticate: Digest realm="MMS Public API", domain="", nonce="OtwBmcu89QuyVMLW6FP1W/ZjD3preQl0", algoritmo=MD5, qop="auth", obsoleto=falso tipo de contenido: aplicación/json content-length: 106 x-envoy-upstream-service-time: 2 fecha: miércoles, 16 de febrero de 2022 17:05:37 GMT servidor: enviado

HTTP/2 200 fecha: miércoles, 16 de febrero de 2022 17:05:37 GMT seguridad de transporte estricta: edad máxima = 31536000; incluirSubdominios; política de referencia: origen estricto cuando origen cruzado políticas de dominio cruzado permitidas x: ninguna opciones de tipo de contenido x: nosniff x-mongodb-service-version: gitHash=8284a4ea05955cb13c38df5489a3794b9a691d4f; versionString=v20220216 tipo de contenido: application/json x-frame-options: DENY content-length: 216 x-envoy-upstream-service-time: 154 server: envoy

No estoy seguro de por qué hay un 401 y un 200, pero funciona. Sin embargo, obtengo un 401 sin el indicador --digest , y ninguna de las soluciones a continuación parece incluir el resumen.

A continuación se muestran todas las formas en que lo intenté, que devuelven 401 "No está autorizado para este recurso".:

Ha podido recuperar

 fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Basic ' + Buffer.from( 'user:pass' ).toString('base64'), }, body: dataString, } )

Mismo resultado con

Solicitud

 const headers = { 'Content-Type': 'application/json', }; var options = { url: url, method: 'POST', headers: headers, body: dataString, auth: { user: 'user', pass: 'pass', }, }; request(options, (error: any, response: any, body: any) => { ... });

nodo-libcurl

 const curl = new Curl(); curl.setOpt(Curl.option.HTTPHEADER, [ 'Content-Type: application/json', ]); curl.setOpt(Curl.option.URL, url); curl.setOpt(Curl.option.POST, true); curl.setOpt(Curl.option.USERPWD, 'user:pass'); curl.setOpt(Curl.option.POSTFIELDS, dataString);

Incluso

PHP

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "..."); curl_setopt($ch, CURLOPT_USERPWD, 'user:pass'); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $result = curl_exec($ch); curl_close($ch);

Editar para el paquete request-digest

 digestRequest .requestAsync({ host: url, path: urlPath, port: 80, method: 'POST', json: true, headers: { 'Content-Type': 'application/json', }, body: body, }) .then(function (response: any) { console.log(response); }) .catch(function (error: any) { console.log(error); });

Respuesta

Error: solicitud incorrecta, la respuesta está vacía

about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

PHP

Debe especificar que se trata de un resumen:

 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);

Obtención de nodo

Esto es lo que he encontrado aquí :

 fetch(url, { ... headers: { 'Authorization': 'Basic ' + Buffer.from(`${username}:${password}`, 'binary').toString('base64') } ... })

Al comparar su código con el código propuesto arriba, veo que falta , 'binary' en el suyo.

solicitud-resumen

Hay un paquete request-digest que puede ayudarte. Ejemplos (tomados del enlace compartido en este párrafo):

Llamar de vuelta

 var digestRequest = require('request-digest')('username', 'password'); digestRequest.request({ host: 'http://test.com', path: '/api/v1/test.json', port: 80, method: 'GET', headers: { 'Custom-Header': 'OneValue', 'Other-Custom-Header': 'OtherValue' } }, function (error, response, body) { if (error) { throw error; } console.log(body); });

Solo promesa

 var digestRequest = require('request-digest')('username', 'password'); digestRequest.requestAsync({ host: 'http://test.com', path: '/api/v1/test.json', port: 80, method: 'GET', excludePort: false, headers: { 'Custom-Header': 'OneValue', 'Other-Custom-Header': 'OtherValue' } }) .then(function (response) { console.log(response.body); }) .catch(function (error) { console.log(error.statusCode); console.log(error.body); });
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda