これが私のコードです:
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');
うまくいくでしょう。
マニュアル( https://angular.io/guide/http )では、HttpHeadersクラスは不変であるため、すべてのset()は新しいインスタンスを返し、変更を適用します。
以下のコードは、angle-4で私のために働きます:
this.http.get(url、{headers:new HttpHeaders()。set( 'UserEmail'、email)})を返してください。
私の従来のアプリケーションでは、プロトタイプのjsのArray.fromがAngularのArray.fromと競合していたため、この問題が発生していました。 AngularのArray.fromバージョンを保存し、プロトタイプロード後に再割り当てすることで解決しました。
Angular 8HttpClientサービス例エラー処理およびカスタムヘッダー
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { Student } from '../model/student';
import { Observable, throwError } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class ApiService {
// API path
base_path = 'http://localhost:3000/students';
constructor(private http: HttpClient) { }
// Http Options
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
// Handle API errors
handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// return an observable with a user-facing error message
return throwError(
'Something bad happened; please try again later.');
};
// Create a new item
createItem(item): Observable<Student> {
return this.http
.post<Student>(this.base_path, JSON.stringify(item), this.httpOptions)
.pipe(
retry(2),
catchError(this.handleError)
)
}
....
....
完全なサンプルチュートリアルを確認してください こちら