如何在 aiohttp 中重定向 post 请求?
How to redirect post request in aiohttp?
我正在尝试制作一个简单的服务,它可以从 post 请求下载文件,然后将其重定向到另一个服务。如何传递我的文件?
我尝试使用 HTTPFound,但我不知道如何通过文件:
raise web.HTTPFound(
location='some_url_to_redirect',
headers=request.headers,
body=request.content,
)
from aiohttp import web, MultipartReader
async def store_files_handler(request):
reader = MultipartReader.from_response(request)
field = await reader.next()
file_name = field.filename
file_path = f"{FOLDER}/file_name"
with open(file_path, 'wb') as file:
while True:
chunk = await field.read_chunk()
if not chunk:
break
file.write(chunk)
raise web.HTTPFound(
location='some_url_to_redirect',
headers=request.headers,
body=reader,
)
def register(app):
app.add_routes([web.post('/store', store_files_handler)])
您不能真正发送带有 302 重定向响应的内容(大多数浏览器只会忽略它并重定向)。目标位置必须提供文件。所以你需要用那个位置扩展你的路由器并在那里提供文件。
app.add_routes([web.post('/store', store_files_handler)])
app.add_routes([web.static('/location_to_file', 'path_to_static_folder')])
或者您可以直接从 /store
端点提供服务,以适合您的设计为准
实际上,我决定使用代码 307,所以它将是:
web.HTTPTemporaryRedirect('some_url_to_redirect')
it can redirect POST request
我正在尝试制作一个简单的服务,它可以从 post 请求下载文件,然后将其重定向到另一个服务。如何传递我的文件?
我尝试使用 HTTPFound,但我不知道如何通过文件:
raise web.HTTPFound(
location='some_url_to_redirect',
headers=request.headers,
body=request.content,
)
from aiohttp import web, MultipartReader
async def store_files_handler(request):
reader = MultipartReader.from_response(request)
field = await reader.next()
file_name = field.filename
file_path = f"{FOLDER}/file_name"
with open(file_path, 'wb') as file:
while True:
chunk = await field.read_chunk()
if not chunk:
break
file.write(chunk)
raise web.HTTPFound(
location='some_url_to_redirect',
headers=request.headers,
body=reader,
)
def register(app):
app.add_routes([web.post('/store', store_files_handler)])
您不能真正发送带有 302 重定向响应的内容(大多数浏览器只会忽略它并重定向)。目标位置必须提供文件。所以你需要用那个位置扩展你的路由器并在那里提供文件。
app.add_routes([web.post('/store', store_files_handler)])
app.add_routes([web.static('/location_to_file', 'path_to_static_folder')])
或者您可以直接从 /store
端点提供服务,以适合您的设计为准
实际上,我决定使用代码 307,所以它将是:
web.HTTPTemporaryRedirect('some_url_to_redirect')
it can redirect POST request