HttpClient angular no envía encabezado

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 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 ‘Solicitud de carga útil’ pero en mi servidor no se reciben los valores POST:

 print_r($_POST); Array ( ) 

Creo que el error proviene del encabezado no establecido durante el POST, ¿qué hay de malo en lo que hice?

Las instancias de la nueva clase HttpHeader son objetos inmutables . Invocar métodos de clase devolverá una nueva instancia como resultado. Entonces, básicamente, debes hacer lo siguiente:

 let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json; charset=utf-8'); 

o

 const headers = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'}); 

Actualización: agregar múltiples encabezados

 let headers = new HttpHeaders(); headers = headers.set('h1', 'v1').set('h2','v2'); 

o

 const headers = new HttpHeaders({'h1':'v1','h2':'v2'}); 

Actualización: aceptar mapa de objetos para HttpClient headers & params

Desde 5.0.0-beta.6 ahora es posible omitir la creación de un objeto HttpHeaders pasar directamente un mapa de objeto como argumento. Entonces ahora es posible hacer lo siguiente:

 http.get('someurl',{ headers: {'header1':'value1','header2':'value2'} }); 

Para agregar múltiples params o encabezados, puede hacer lo siguiente:

 constructor(private _http: HttpClient) {} //.... const url = `${environment.APP_API}/api/request`; let headers = new HttpHeaders().set('header1', hvalue1); // create header object headers = headers.append('header2', hvalue2); // add a new header, creating a new object headers = headers.append('header3', hvalue3); // add another header let params = new HttpParams().set('param1', value1); // create params object params = params.append('param2', value2); // add a new param, creating a new object params = params.append('param3', value3); // add another param return this._http.get(url, { headers: headers, params: params }) 

establecer encabezados http como a continuación en su solicitud http

 return this.http.get(url, { headers: new HttpHeaders({'Authorization': 'Bearer ' + token}) }); 

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:

  return this.http.get (url, {headers: new HttpHeaders (). set ('UserEmail', email)});

Luché con esto por mucho tiempo. Estoy usando Angular 6 y encontré que

 let headers = new HttpHeaders(); headers = headers.append('key', 'value'); 

no funcionó. Pero, ¿qué fue el trabajo?

 let headers = new HttpHeaders().append('key', 'value'); 

lo hizo, lo cual tiene sentido cuando te das cuenta de que son inmutables. Entonces, al haber creado un encabezado, no puede agregarlo. No lo he intentado, pero sospecho

 let headers = new HttpHeaders(); let headers1 = headers.append('key', 'value'); 

también funcionaría

Intereting Posts