2015-11-10 15 views
6
var req ={ 
     "request": { 
     "header": { 
      "username": "name", 
      "password": "password" 
     }, 
     "body": { 
     "shape":"round"  
    } 
     } 
    }; 

    request.post(
     {url:'posturl', 

     body: JSON.stringify(req), 
     headers: { "content-type": "application/x-www-form-urlencoded"} 
     }, 
     function (error, response, body) {   
      if (!error && response.statusCode == 200) { 
       console.log(body) 
      } 
     } 
    ); 

Desidero inviare corpo di richiesta grezza in variabile req. Funziona su postman ma nel nodo js non sono in grado di inviare il json raw come corpo della richiesta per la richiesta post.nodo js invia richiesta post con corpo di richiesta raw

+0

Qual è l'errore? Potrebbe il tuo "content-type": "application/x-www-form-urlencoded" 'essere errato, dal momento che stai inviando JSON? Dovrebbe essere 'application/json'. –

+0

POST /HTTP/JSON/Prices/GetPriceSheet.aspx HTTP/1.1 Host : host.com Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache { "richiesta": {"header": {"username": "nome", "password": "pw"}, "body": {"shape": "round"}}} Questa è l'anteprima della richiesta che sta funzionando su postman. Quindi ho bisogno di x-www-form-urlencoded nell'header ma anche di inviare dati raw json. L'errore che sto ottenendo è formato errato dal servizio di riposo. –

risposta

2

Modificare lo Content-Type in application/json, poiché il corpo è in formato JSON.

+0

Ho provato che ma "content-type": "application/x-www-form-urlencoded" è anche un requisito per le intestazioni. –

+0

Quindi devi cambiare il tuo corpo per essere in quel formato, non in JSON. –

+0

Sì, credo che questo sia il problema, non ho bisogno di JSON ma di dati nella stringa di query in base al tipo di contenuto. Proverò a capire il formato di x-www-form. Grazie. –

5

Si sta tentando di inviare JSON (la variabile req) ma la si analizza come stringa (JSON.stringify(req)). Poiché il tuo percorso è in attesa di JSON, probabilmente fallirà e restituirà un errore. Prova la richiesta qui di seguito:

request.post({ 
    url: 'posturl', 
    body: req, 
    json: true 
}, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body) 
    } 
}); 

Invece di impostare le intestazioni, si può semplicemente aggiungere l'opzione json: true se si sta inviando JSON.

0

L'aggiunta del "Content-Length" nell'intestazione per la stringa aggiunta nel corpo risolverà questo problema. Ha funzionato per me.

intestazioni: { "Cache-Control": "no-cache", "Content-Type": "application/json; charset = UTF-8", 'Content-Length': req.length}

Problemi correlati