Aqui está o meu código:
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
logIn(username: string, password: string) {
const url = 'http://server.com/index.php';
const body = JSON.stringify({username: username,
password: password});
const headers = new HttpHeaders();
headers.set('Content-Type', 'application/json; charset=utf-8');
this.http.post(url, body, {headers: headers}).subscribe(
(data) => {
console.log(data);
},
(err: HttpErrorResponse) => {
if (err.error instanceof Error) {
console.log('Client-side error occured.');
} else {
console.log('Server-side error occured.');
}
}
);
}
e aqui a rede depura:
Request Method:POST
Status Code:200 OK
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:46
Content-Type:text/plain
e Dados são armazenados em 'Solicitar carga útil', mas no meu servidor não recebeu os valores POST:
print_r($_POST);
Array
(
)
Acredito que o erro vem do cabeçalho não definido durante o POST, o que fiz de errado?
angular
http-headers
angular-httpclient
Frennetix
fonte
fonte
Respostas:
As instâncias da nova
HttpHeader
classe são objetos imutáveis . Invocar métodos de classe retornará uma nova instância como resultado. Então, basicamente, você precisa fazer o seguinte:ou
Atualização: adicionando vários cabeçalhos
ou
Atualização: aceite o mapa de objetos para cabeçalhos e parâmetros de HttpClient
Desde 5.0.0-beta.6 agora é possível pular a criação de um
HttpHeaders
objeto e passar diretamente um mapa de objeto como argumento. Então agora é possível fazer o seguinte:fonte
set
nome do método é um pouco enganador.HttpHeaders().set(..).set(..)
mas agora novamente os cabeçalhos não estão sendo gravados nos campos do cabeçalho HTTP ?!Para adicionar múltiplos parâmetros ou cabeçalhos, você pode fazer o seguinte:
fonte
lazyUpdate
propriedade, mas, eventualmente, ele trava com aCreateListFromArrayLike
exceção ao tornar a solicitação efetiva, assinando-a.defina cabeçalhos http como abaixo em sua solicitação http
fonte
Eu lutei com isso por um longo tempo. Estou usando o Angular 6 e descobri que
não funcionou. Mas o que funcionou foi
fez, o que faz sentido quando você percebe que eles são imutáveis. Então, depois de criar um cabeçalho, você não pode adicioná-lo. Eu não tentei, mas suspeito
funcionaria também.
fonte
let
pode corrigi-loEu estava com o Angular 8 e a única coisa que funcionou para mim foi esta:
fonte
No manual ( https://angular.io/guide/http ), li: A classe HttpHeaders é imutável; portanto, cada set () retorna uma nova instância e aplica as alterações.
O código a seguir funciona para mim com angular-4:
fonte
No meu aplicativo herdado, Array.from do protótipo js estava em conflito com o Array.from da angular, que estava causando esse problema. Eu o resolvi salvando a versão Array.from da angular e reatribuindo-a após o carregamento do protótipo.
fonte
Exemplo de serviço HttpClient angular 8 com tratamento de erros e cabeçalho personalizado
Veja o exemplo completo do tutorial aqui
fonte