반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 머신러닝
- 자바스크립트
- 소프트웨어
- 컴퓨터과학
- 자료구조
- 파이썬
- 딥러닝
- 네트워크
- 보안
- 클라우드컴퓨팅
- 컴퓨터비전
- 소프트웨어공학
- I'm Sorry
- 인공지능
- 네트워크보안
- 버전관리
- Yes
- 사이버보안
- 데이터베이스
- 2
- 프로그래밍언어
- 프로그래밍
- 웹개발
- 알고리즘
- 컴퓨터공학
- 코딩
- 데이터구조
- 데이터분석
- 빅데이터
- 데이터과학
Archives
- Today
- Total
스택큐힙리스트
어떻게하면 백엔드 API에서 헤더 또는 특정 헤더를 가져올 수 있을까요? 본문
반응형
나는 fastAPI에서 함수 내에서 API에서 특정 헤더를 검색하고 싶지만, 이에 대한 해결책을 찾을 수 없습니다.
flask에서는 간단했습니다: request.headers['your-header-name']
왜 fastAPI에서는 이처럼 간단한 일을 하는 것이 매우 복잡한 건가요?
헤더를 검색하는 해결책을 아는 사람 있나요? 감사합니다 :)
데코레이터:
def token_required(f):
@wraps(f)
def decorator(*args, **kwargs):
CONFIG = settings.read_config()
token = None
headers = Request.headers
if Authorization in headers:
auth_header = Request.headers
token = auth_header
elif not token:
return {오류: 토큰이 없거나 잘못된 헤더 이름입니다.}, 401
try:
public_key = CONFIG[APPLICATION][PUBLIC_KEY]
claim = jwt.decode(token, public_key)
claim.validate()
except UnicodeDecodeError as err:
return {오류: f오류가 발생했습니다. -> {err} 토큰을 확인하세요.}, 401
return f(*args, **kwargs)
return decorator
'Authorization' 헤더를 읽어서 존재 여부를 확인해야 합니다.
답변 1
비슷하게 할 수 있습니다.
from fastapi import FastAPI, Request
@app.get(/)
async def root(request: Request):
my_header = request.headers.get('header-name')
...
참고: 소문자로 표기되어 있습니다.
예시:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get(/)
async def root(request: Request):
my_header = request.headers.get('my-header')
return {message: my_header}
이제 이 앱을 로컬호스트에서 uvicorn과 함께 실행하고 curl
을 보내볼 수 있습니다.
curl -H My-Header: test -X GET http://localhost:8000
결과는 다음과 같습니다.
{message:test}
UPD:
데코레이터에서 액세스해야하는 경우 다음을 사용할 수 있습니다.
def token_required(func):
@wraps(func)
async def wrapper(*args, request: Request, **kwargs):
my_header = request.headers.get('my-header')
# my_header은 이제 데코레이터에서 사용 가능합니다
return await func(*args, request, **kwargs)
return wrapper
답변 2
서버 API에서 헤더 또는 특정 헤더를 받아오는 방법은 다양합니다. 헤더는 HTTP 요청과 응답의 일부로, 다양한 메타데이터를 포함하고 있습니다. 이러한 헤더는 웹 애플리케이션의 동작에 중요한 역할을 합니다. 따라서 이러한 헤더를 필요로 할 때, 몇 가지 접근 방법을 고려해 볼 수 있습니다.첫 번째 접근 방법은 프론트엔드에서 백엔드 API에 HTTP 요청을 보내는 동안 헤더 정보를 포함시키는 것입니다. 이를 위해 일반적인 HTTP 라이브러리인 axios나 fetch를 사용할 수 있습니다. 헤더를 추가하기 위해 간단한 코드를 작성하면 됩니다. 예를 들어, axios를 사용한 코드는 다음과 같습니다.
```javascript
import axios from 'axios';
const getHeader = async () => {
try {
const response = await axios.get('백엔드 API URL', {
headers: {
'헤더 이름': '헤더 값'
}
});
console.log(response.headers); // 헤더 출력
} catch (error) {
console.error(error);
}
};
getHeader();
```
위의 코드에서 '헤더 이름'과 '헤더 값'에는 백엔드 API에서 요구하는 실제 헤더 정보를 입력해야 합니다. 이 코드를 실행하면 API에서 반환하는 응답 헤더를 콘솔에 출력할 수 있습니다.
두 번째 접근 방법은 백엔드 API에서 해당 헤더 값을 가져오도록 요청하는 것입니다. 이를 위해 백엔드 개발 플랫폼 또는 언어에 따라 다른 방법이 있을 수 있습니다. 예를 들어, Node.js의 경우, 응답 객체의 `get` 메서드를 사용하여 특정 헤더 값을 가져올 수 있습니다. 다음은 Express.js를 사용한 예시 코드입니다.
```javascript
const express = require('express');
const app = express();
app.get('/api', (req, res) => {
// 헤더 값을 가져올 때, 대소문자를 구분해야 합니다.
const specificHeader = req.get('헤더 이름');
res.send(specificHeader);
});
app.listen(3000, () => {
console.log('서버가 3000번 포트에서 실행 중입니다.');
});
```
위의 코드에서 '/api' 엔드포인트로 요청이 들어오면, `req.get('헤더 이름')`을 사용하여 해당 헤더 값을 가져올 수 있습니다. 이 값을 응답으로 보내면 프론트엔드에서 해당 헤더 값을 받을 수 있습니다.
이런 식으로 프론트엔드와 백엔드 간에 헤더 정보를 주고받을 수 있습니다. 헤더는 API 요청 및 응답 프로세스에서 중요한 역할을 하므로 적절한 방법으로 사용하고 관리하는 것이 좋습니다.
반응형
Comments