7
respostas

Request http.post wsdl com content-type text/xml

Bom dia Flavio, tudo bem ?

Ao concluir a aula na qual você ensina como consumir uma API rest da aluraCar e a fim de estudo e para complementar o conhecimento estou tentando consumir um webservices wsdl no qual preciso setar no header o content-type no cabeçalho da requisição conforme código abaixo, porem não obtive sucesso pois pelo que entendi na requisição post utilizando http.post só temos disponível application/x-www-form-urlencoded, multipart/form-data, ou text/plain sendo assim como contorna essa situação ?

let myHeaders = new Headers();
        myHeaders.set('Accept', 'text/xml');
        myHeaders.set('content-type', 'text/xml;charset=UTF-8');

let options = new RequestOptions({ headers: myHeaders });

this.http.post(this.url, this.body, options)
          .map(resp => resp.json())
          .subscribe(data => {
              console.log(data);
          })

Grato desde já pela sua atenção

7 respostas

Bom dia!

Desconheço essa limitação que você citou.

Já tentou adicionar com append() no lugar de set()? O set adicionar um novo valor para um header já existente, o append adiciona uma nova informação. no header.

Blz?

Sucesso e bom estudo meu aluno!

Sim, na minha primeira tentativa foi com append porem sem sucesso

myHeaders.append('content-type', 'text/xml');

Se observamos a request realizada temos no content-type enviado como text/plan e o serviço espera text/xml

Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7
Connection:keep-alive
Content-Length:550
content-type:text/plain

O correto é Content-Type, e não content-type.

Você já tentou assim?

const url = "/urlqualquer";
const postData = JSON.stringify({/* dado qualquer*/});

const options = {
  headers: { 'Content-Type': ['application/json'] }
};
return http.post(url, postData, options).subscribe(response => {
  console.log(response);
});

Sim, já tentei com Content-Type.

Só para alinhamento estamos falando de uma integração em XML e não json.

Então, mesmo com o exemplo acima, usando o array e o content type não funcionou?

Assim

const options = {
  headers: { 'Content-Type': ['text/xml;charset=UTF-8'] }
};

this.http.post(this.url, this.body, options)
          .map(resp => resp.json())
          .subscribe(data => {
              console.log(data);
          })

Bom, se você quer enviar XML imagino que esteja querendo enviar uma mensagem SOAP. Angular não suporta isso out of the box (apesar de alterar a info do header ter que ser possível).

Porém há o módulo

https://github.com/autopulous/angular2-soap

Já deu uma chance para ele?