7

Based off of my previous question, I need to now add a header to the response.

According to the documentation, I can simply just add the headers and another attribute to the RedirectResponse object.

When I test this, it doesn't seem to carry the header value over.

According to this post, it is impossible to set headers for a redirect request. So instead of a Redirect, maybe I should try something else?

Any ideas?

from fastapi import FastAPI, Request
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data(request: Request):
    params = str(request.query_params)
    url = f'http://some.other.api/{params}'
    headers = {'Authorization': "some_long_key"}
    response = RedirectResponse(url=url, headers=headers)
    return response
Chris
  • 18,724
  • 6
  • 46
  • 80
Werner Raath
  • 1,322
  • 3
  • 16
  • 34

1 Answers1

0

One solution is to do the request in the app and then return the response

BUT this is very inefficient and will force all traffic to come through this server, while a redirect would have less network load

import requests
from fastapi import FastAPI, Request, Response

app = FastAPI()

@app.get("/data/")
async def api_data(request: Request):
    params = str(request.query_params)
    url = f'http://some.other.api/{params}'
    headers = {'Authorization': "some_long_key"}
    r = requests.get(url, headers=headers)
    return Response(content=r.content)
Werner Raath
  • 1,322
  • 3
  • 16
  • 34