问题标签 [httpx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
236 浏览

python - 在 FastAPI 路由器方法/端点之间发送数据的方式

假设我们有两个最小的 Fast API 端点:

现在想象一些客户POSTendpoint_1一些attributes. 我需要获取这些属性并在内部使用它们endpoint_2来向某些外部服务发出一些进一步的请求。然后返回的数据endpoint_2将由我的前端检索并呈现给用户。

在 Fast API中发送数据endpoint_1的最佳推荐方式是什么?endpoint_2

我想过以下几点:

  • 将数据保存在某个本地数据库中endpoint_1,然后在endpoint_2. 检索数据后,从数据库中删除属性。这似乎有很多开销只保留一张真正将有一条记录的表。

  • 使用一些缓存机制(Redis / Memcached)保存数据,但话又说回来,配置它只是为了保持它似乎也很奇怪。

为了更全面地了解这一点,我在后端使用 Fast API + Python 3.9 来创建 REST 服务,以及httpx向外部服务发出异步请求的库。另一方面,对于前端,我使用的是 React 和 Typescript。前端只会调用endpoint_2来显示items. endpoint_1只会被某些客户端服务调用。

0 投票
0 回答
44 浏览

python - 由于 cookie,无法自动执行注册过程

我正在尝试自动执行以下url的注册过程

它的响应应该与302您从浏览器执行时相同,但看起来 POST 请求未正确发送。我注意到,如果我复制了浏览器 cookie 并包含在标头中,那么请求会成功进行,那么我该如何自动化呢?

测试编号:2102102299

0 投票
0 回答
85 浏览

python - 如何防止 python httpx 对我的 URL 进行百分比编码?

我想发送一个带大括号的未编码查询字符串。

在内部,httpx将传递的 url 包装在httpx.URL对象中,并且百分比对花括号进行编码,我需要将它们发送未编码。我尝试将查询字符串作为 params 字段传递,但最终仍被编码。我还尝试设置 URL 的查询属性(url._uri_reference.query),但这会导致错误,因为该属性不可访问。有没有办法让 httpx 库不编码 URL 或使用自定义编码?

0 投票
0 回答
185 浏览

python - 在 Fast API 中使用上下文管理器作为全局依赖项

我有一个主要调用外部 API 的 FastAPI 应用程序。在某些情况下,路径操作将对同一主机进行多次调用。出于这个原因,我想为每个请求使用一个 httpx AsyncClient。

执行此操作的正确方法似乎是在依赖范围内让客户:

不过,我不想将此依赖项添加到每个路径操作中,纯粹是为了不在整个代码中重复自己。但是,在阅读了https://fastapi.tiangolo.com/tutorial/dependencies/global-dependencies/之后,似乎全局依赖项仅在该依赖项正在执行某些操作而不是返回某些内容时才适用。我看不到每个路径操作如何访问产生的客户端,除非为该特定路径操作明确指定依赖关系。我也看不到如何将令牌传递给依赖项。

即这将不允许我的路径操作使用客户端:

但这将:

如果该依赖项返回路径操作所需的内容,是否可以使用全局依赖项?

0 投票
1 回答
129 浏览

python - Python 异步迭代器(httpx)和 tqdm.asyncio(下载进度条)

我将 httpx 用作 AsyncClient()(称为 http)并希望显示下载进度。

下载工作正常,进度条确实显示了一些进度,但与提供的比例无关。

结果:

显示正确的总大小,但显然单位不同。

如果使用特定的块大小,进度也不会正确显示:

然后进度条将遍历块(块计数),但字节的比例设置不起作用,例如对于 10 MB 文件:

最接近字节流的结果是省略块大小,但单位关闭。

关于如何显示正确进度的任何想法?

谢谢!

0 投票
1 回答
171 浏览

python - Python & HTTPX:httpx 客户端的连接池是如何工作的?

考虑这个向 API 端点发出简单 GET 请求的函数:

每次check_status_without_session调用该函数时,运行此函数都会打开一个新的 TCP 连接。现在, HTTPX 文档的这一部分建议在Client向同一个 URL 发出多个请求时使用 API。以下函数执行此操作:

根据文档,使用Client将确保:

...客户端实例使用 HTTP 连接池。这意味着当您向同一主机发出多个请求时,客户端将重用底层 TCP 连接,而不是为每个请求重新创建一个。

我的问题是,在第二种情况下,我将Client上下文管理器包装在一个函数中。如果我check_status_with_session用同一个 URL 多次调用,那不是每次调用函数时都会创建一个新的连接池吗?这意味着它实际上并没有重用连接。由于函数执行后函数栈被销毁,Client对象也应该被销毁,对吧?这样做有什么好处还是有更好的方法?

0 投票
0 回答
71 浏览

python - 下载大文件并将它们流式传输到 S3?

我需要下载大文件并将它们写入 S3。是否可以将文件直接流式传输到 S3,而不是将文件下载到本地硬盘并复制到 S3?

我从https://www.python-httpx.org/advanced/找到了以下代码。如何将块写入 S3?

0 投票
1 回答
67 浏览

python - Python httpx异步流数据?

在链接https://zetcode.com/python/httpx/中,它具有以下流示例

它是一种异步传输数据的方法吗?例如

0 投票
0 回答
35 浏览

python - 数据包返回和异步python代码接收它们之间的延迟?

我有大约 130 个异步 GET 请求正在 python 中使用 httpx 和 asyncio 通过我自己在 AWS 上创建的代理发送。

在 python 脚本中,我打印了每个请求发送之前的时间,可以看到它们都在不到 70 毫秒内发送。但是,我通过立即获取当前时间来计时请求的持续时间,有些请求最多需要 30 秒!这段时间的分布似乎相当水平,所以我每秒收到大约 3-5 个请求,持续 30 秒。

我使用tcpdump和wireshark查看返回的数据包,似乎所有应用程序数据都在4秒内返回(包括tcp握手)所以我不明白python延迟的原因。

tcp 拆卸发生在 35 秒后,所以这可能是延迟的原因?在 httpx.get() 被解除阻塞并且可以读取请求之前,httpx 是否等待连接关闭(FIN 和 ACK)?

我可以尝试什么来加快速度?

这是我的代码的简化版本:

0 投票
0 回答
12 浏览

python - Response.aiter_bytes() 有哪些内容解码?

https://www.python-httpx.org/async/的文档中,有两种流式传输方法。

这两者有什么不同?内容解码Response.aiter_bytes()有哪些?