내 코드는 다음과 같습니다.
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.');
}
}
);
}
그리고 여기 네트워크 디버그 :
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
데이터가 ‘요청 페이로드’에 저장되었지만 내 서버에 POST 값이 수신되지 않았습니다.
print_r($_POST);
Array
(
)
POST 중에 설정되지 않은 헤더에서 오류가 발생했다고 생각합니다. 무엇을 잘못 했습니까?
답변
새 HttpHeader
클래스 의 인스턴스 는 변경할 수없는 객체입니다. 클래스 메소드를 호출하면 결과적으로 새 인스턴스가 리턴됩니다. 따라서 기본적으로 다음을 수행해야합니다.
let headers = new HttpHeaders();
headers = headers.set('Content-Type', 'application/json; charset=utf-8');
또는
const headers = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'});
업데이트 : 여러 헤더 추가
let headers = new HttpHeaders();
headers = headers.set('h1', 'v1').set('h2','v2');
또는
const headers = new HttpHeaders({'h1':'v1','h2':'v2'});
업데이트 : HttpClient 헤더 및 매개 변수에 대한 객체 맵 수락
5.0.0-beta.6 부터 HttpHeaders
개체 생성을 건너 뛰고 개체 맵을 인수로 직접 전달할 수 있습니다. 이제 다음을 수행 할 수 있습니다.
http.get('someurl',{
headers: {'header1':'value1','header2':'value2'}
});
답변
배수 매개 변수 또는 헤더를 추가하려면 다음을 수행하십시오.
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<any[]>(url, { headers: headers, params: params })
답변
http 요청에서 아래와 같이 http 헤더를 설정하십시오.
return this.http.get(url, { headers: new HttpHeaders({'Authorization': 'Bearer ' + token})
});
답변
나는 이것을 오랫동안 고투했다. Angular 6을 사용하고 있으며
let headers = new HttpHeaders();
headers = headers.append('key', 'value');
작동하지 않았다. 그러나 일한 것은
let headers = new HttpHeaders().append('key', 'value');
그들이 불변임을 깨달았을 때 의미가 있습니다. 따라서 헤더를 만들면 추가 할 수 없습니다. 나는 그것을 시도하지 않았지만 의심
let headers = new HttpHeaders();
let headers1 = headers.append('key', 'value');
작동합니다.
답변
나는 Angular 8과 함께 있었고 나를 위해 일한 유일한 것은 이것입니다.
getCustomHeaders(): HttpHeaders {
const headers = new HttpHeaders()
.set('Content-Type', 'application/json')
.set('Api-Key', 'xxx');
return headers;
}
답변
매뉴얼에서 ( https://angular.io/guide/http )에서 읽은 내용 : HttpHeaders 클래스는 변경할 수 없으므로 모든 set ()은 새 인스턴스를 반환하고 변경 사항을 적용합니다.
다음 코드는 angular-4에서 작동합니다.
이것을 돌려줍니다 .http.get (url, {headers : new HttpHeaders (). set ( 'UserEmail', email)});
답변
레거시 응용 프로그램에서 프로토 타입의 Array.from js는 angular의 Array.from과 충돌 하여이 문제를 일으켰습니다. angular의 Array.from 버전을 저장하고 프로토 타입로드 후 다시 할당하여 해결했습니다.