【问题标题】:proxy an external website using python fast api not supporting query params使用不支持查询参数的python快速api代理外部网站
【发布时间】:2022-08-14 16:46:47
【问题描述】:

我正在尝试使用 python Fast API 框架代理外部网站(在不同容器上运行的花监控 URL):

client = AsyncClient(base_url=f\'http://containername:7800/monitor\')

@app.get(“/monitor/{path:path}”)
async def tile_request(path: str):
    req = client.build_request(\"GET\", path)
    r = await client.send(req, stream=True)
    return StreamingResponse(
        r.aiter_raw(),
        background=BackgroundTask(r.aclose),
        headers=r.headers
   )

它能够为每个路径代理容器 URL。例如。

http://python_server:8001/monitor/dashboard --> http://containername:7800/monitor/dashboard

http://python_server:8001/monitor/tasks --> http://containername:7800/monitor/tasks

它运作良好。但是当 PATH 在 URL 中有一些查询参数时它会失败。

例如。

http://python_server:8001/monitor/dashboard?json=1&_=1641485992460 --> redirects to http://containername:7800/monitor/dashboard 

(请注意,没有查询参数附加到 URL)。

任何人都可以帮助我们如何使用任何查询参数代理这个外部网站的任何路径。

  • 你只传递路径,你不捕获或传递查询参数。您可以从请求对象中获取它们,
  • 这回答了你的问题了吗? FastAPI variable query parameters
  • 谢谢,我认为它应该可以工作..需要检查如何将查询参数传递给 httpx 客户端。

标签: python fastapi httpx


【解决方案1】:

我尝试了这段代码,但它对我不起作用,但这确实:

@app.api_route("/{path:path}", methods=["GET"])
async def proxy_request(path: str):
    """Proxy requests to the file server."""
    req = HTTP_SERVER.build_request("GET", path)
    resp = await HTTP_SERVER.send(req)
    return Response(
        content=resp.content,
        headers=resp.headers,
        status_code=resp.status_code)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2020-07-28
    相关资源
    最近更新 更多