当前位置: 首页 > 知识库问答 >
问题:

使用不支持查询参数的python fast api代理外部网站

邓光耀
2023-03-14

我正在尝试使用 python 快速 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 --

超文本传输协议://python_server: 8001/监视器/任务--

它工作得很好。但是当PATH在URL中有一些查询参数时,它会失败。

为了前任。

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

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

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

共有1个答案

仲浩歌
2023-03-14

此代码适用于我并在生产中使用:

import httpx
from httpx import AsyncClient
from fastapi import Request
from fastapi.responses import StreamingResponse
from starlette.background import BackgroundTask

app = FastAPI()
HTTP_SERVER = AsyncClient(base_url="http://localhost:8000/")

async def _reverse_proxy(request: Request):
    url = httpx.URL(path=request.url.path, query=request.url.query.encode("utf-8"))
    rp_req = HTTP_SERVER.build_request(
        request.method, url, headers=request.headers.raw, content=await request.body()
    )
    rp_resp = await HTTP_SERVER.send(rp_req, stream=True)
    return StreamingResponse(
        rp_resp.aiter_raw(),
        status_code=rp_resp.status_code,
        headers=rp_resp.headers,
        background=BackgroundTask(rp_resp.aclose),
    )

app.add_route("/{path:path}", _reverse_proxy, ["GET", "POST"])
 类似资料:
  • 我试图在我的存储库中编写一个类似的查询方法 在执行代码时,我遇到了以下错误: 组织。postgresql。util。PSQLException:无法推断用于java实例的SQL类型。时间瞬间使用带有显式类型值的setObject()指定要使用的类型。 我是忘记了什么,还是Spring Data Jdbc根本不支持使用Instant作为参数?如果有,将来是否计划提供这种支助?

  • 我已经检查了我正在使用所有最新的NuGet库版本。有人能给我提示一下还有什么要查吗?这是代码:

  • 在ElasticSearch7.x中,我使用一个具有同义词过滤器的分析器对数据字段进行了索引。但是,为了支持增强“完全”匹配数据字段中的查询词的查询,而不是匹配数据中的同义词的查询,我将使用。 为此,对于我想要精确匹配的查询,我想提供一个在其中没有同义词过滤器的分析器。这可以通过来完成。但是,我的主要查询是查询,用于在所有需要的字段上搜索这些术语(并且具有不同的重要性(boosting))。 似乎

  • 我正在寻找一种方法来记录这个框架中包含的所有查询信息http://ttddyy.github.io/datasource-proxy/docs/current/user-guide/index.html#query-然而,我想排除查询参数的日志记录。有没有办法使用数据源代理来实现这一点?如果没有,我还有什么选择?我目前正在使用spring boot 2.1.1。 谢谢,布莱恩

  • 此页面包含来自 Booyant 和 linkerd 用户的关于 linkerd 的博客和谈话。 通过 Buoyant的博客 查看更多的帖子! 注: 详细列表请见原文(没有翻译的必要): https://linkerd.io/overview/external-resources/

  • 我需要帮助来完成Woocommerce产品列表的SQL查询。我需要将其用于WPDataTableSQL输入。 我搜索了一个示例代码,并修改了找到的代码: 它可以工作,但没有可变产品的产品行。它只显示产品的主要变化。 产品牛排:我有6种不同的牛排作为自己的产品,价格不同,重量也不同。通过我的SQL查询,我只能看到主产品“牛排”,没有变化和变化价格。 表wp_员额 表wp_Posteta- wp_术语