В Angular можно использовать интерсепторы для обработки HTTP-запросов и ответов. Интерсепторы позволяют вставлять логику до или после отправки запроса или получения ответа. В вашем случае, вы хотите получить куки из ответа сервера в интерсепторе.
Для этого, вам понадобится использовать HttpClient
и HttpInterceptor
из модуля @angular/common/http
. По умолчанию, при отправке запроса, Angular не отправляет куки в заголовках HTTP. Однако, вы можете настроить HttpClient
для включения этого поведения, используя опцию withCredentials
.
Давайте создадим новый класс, который будет реализовывать интерфейс HttpInterceptor
:
import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http'; import { Observable } from 'rxjs'; @Injectable() export class CookieInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { // Клонируем запрос с настройками const modifiedRequest = request.clone({ withCredentials: true }); // Передаем модифицированный запрос следующему обработчику return next.handle(modifiedRequest); } }
Затем необходимо зарегистрировать этот интерсептор в вашем Angular приложении. Для этого добавьте его в провайдеры в вашем модуле:
import { NgModule } from '@angular/core'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { CookieInterceptor } from './cookie.interceptor'; @NgModule({ imports: [ HttpClientModule ], providers: [ { provide: HTTP_INTERCEPTORS, useClass: CookieInterceptor, multi: true } ] }) export class AppModule { }
Теперь когда вы будете отправлять запросы с помощью HttpClient
, интерсептор будет автоматически добавлять withCredentials: true
в заголовки запроса, позволяя отправлять куки и получать их в ответе.
Например, в следующем примере мы отправляем GET-запрос на сервер и выводим полученные куки в консоль:
import { Component, OnInit } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; @Component({ selector: 'app-example', template: ` <button (click)="getData()">Получить данные</button> ` }) export class ExampleComponent implements OnInit { constructor(private http: HttpClient) { } ngOnInit() { } getData() { this.http.get('/api/data').subscribe((response) => { console.log(response.headers.get('Set-Cookie')); }); } }
В примере мы используем httpClient.get
для отправки GET-запроса на /api/data
. В объекте response
вы можете обратиться к заголовкам ответа с помощью метода headers.get('Set-Cookie')
, чтобы получить куки.
Надеюсь, это поможет вам получить куки ответа в интерсепторе Angular.