Aquí está mi 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.');
}
}
);
}
y aquí la depuración de la red:
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
y los datos se almacenan en 'Solicitar carga útil' pero en mi servidor no recibió los valores POST:
print_r($_POST);
Array
(
)
Creo que el error proviene del encabezado no configurado durante la POST, ¿qué hice mal?
angular
http-headers
angular-httpclient
Frennetix
fuente
fuente
Respuestas:
Las instancias de la nueva
HttpHeader
clase son objetos inmutables . Invocar métodos de clase devolverá una nueva instancia como resultado. Básicamente, debes hacer lo siguiente:o
Actualización: agregar múltiples encabezados
o
Actualización: aceptar mapa de objetos para encabezados y parámetros HttpClient
Desde 5.0.0-beta.6 ahora es posible omitir la creación de un
HttpHeaders
objeto y pasar directamente un mapa de objetos como argumento. Entonces ahora es posible hacer lo siguiente:fuente
set
nombre del método es algo engañoso.HttpHeaders().set(..).set(..)
pero ahora los encabezados no se escriben en los campos de encabezado HTTP?Para agregar múltiples parámetros o encabezados, puede hacer lo siguiente:
fuente
lazyUpdate
propiedad, pero eventualmente se bloqueará con laCreateListFromArrayLike
excepción al hacer efectiva la solicitud suscribiéndose a ella.establecer encabezados http como a continuación en su solicitud http
fuente
Luché con esto durante mucho tiempo. Estoy usando Angular 6 y descubrí que
no funcionó. Pero lo que funcionó fue
hizo, lo que tiene sentido cuando te das cuenta de que son inmutables. Entonces, después de haber creado un encabezado que no puede agregarle. No lo he intentado, pero sospecho
funcionaría también
fuente
let
puede solucionarloEstaba con Angular 8 y lo único que funcionó para mí fue esto:
fuente
En el manual ( https://angular.io/guide/http ) leí: La clase HttpHeaders es inmutable, por lo que cada conjunto () devuelve una nueva instancia y aplica los cambios.
El siguiente código funciona para mí con angular-4:
fuente
En mi aplicación heredada, Array.from del prototipo js estaba en conflicto con Array.from de angular que causaba este problema. Lo resolví guardando la versión Array.from de angular y reasignándola después de la carga del prototipo.
fuente
Ejemplo de Angular 8 HttpClient Service con manejo de errores y encabezado personalizado
Consulte el tutorial completo de ejemplo aquí
fuente