问题标签 [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 投票
1 回答
167 浏览

python-3.x - urllib.request 在行为上与 curl 或 httpx 有何不同?在向 Google Container Registry 的请求中获取 401

我目前正在编写一些代码来与 Google Container Registry 上的图像进行交互。我有使用plaincurl和also的工作代码httpx。我正在尝试构建一个没有 3rd 方依赖项的包。我的好奇心是围绕一个特定的端点,我从该端点获得了 curl 和 httpx 的成功响应,但是 401 Unauthorized using urllib.request.

演示我要实现的目标的 bash 脚本如下。它从注册表 API 检索访问令牌,然后使用该令牌来验证 API 确实运行版本 2 并尝试访问特定的 Docker 映像配置。恐怕为了对此进行测试,您将需要访问私有 GCR 图像和其中一个标签的摘要。

我还创建了两个 Jupyter 笔记本,在httpx和 bare中展示了我的解决方案urllib.request。httpx 完美运行,而 urllib 在图像配置请求上以某种方式失败。试图找出差异的想法已经不多了。如果您自己运行笔记本,您将看到被调用的 URL 包含一个令牌作为查询参数(这是安全问题吗?)。当我打开该链接时,我实际上可以自己成功下载数据。也许 urllib 仍然使用承载令牌传递授权标头,使最后一次调用失败并出现 401 未授权?

非常感谢任何见解。

0 投票
1 回答
226 浏览

python - 为 API 构建异步 Python 函数

我正在创建一个与 API 通信的模块,并且我正在考虑使用 asyncio 创建我的函数。现在我的代码看起来像这样:

如您所见,我正在使用请求模块来发送数据。我认为我需要这样做:

这会使我的函数异步吗?还是我也应该使用 httpx(或 aiohttp)之类的东西来等待结果?像下面这样

谢谢你的帮助。试图在那里学习异步python。

0 投票
1 回答
323 浏览

testing - 使用 HTTPX 进行 Tornado 测试

无论使用哪种 Python Web 框架,我都希望标准化HTTPX的测试使用。我设法让它与 Quart 和 FastAPI 一起工作,但我遇到了 Tornado 的问题,因为它不符合 ASGI,并且它使用特定的异步实现,尽管它目前基于 asyncio。

要测试的最小应用程序分为三个部分main.pyconftest.pytest_hello.py

应用程序/main.py

测试/conftest.py

测试/test_hello.py

项目结构是这样的:

我得到的错误

0 投票
1 回答
1074 浏览

python-3.x - 发出异步 HTTP 请求并继续执行循环

我有一个带有以下伪代码的简单 python 函数:

while 循环永远运行,并在循环的前半部分进行 CPU 密集型计算。所有这些都是同步运行的,没关系。我想做的是通过使 POST 请求异步来节省一些时间。while 循环需要永远运行,但是我希望异步发出请求,以便循环可以继续下一次迭代,而无需等待请求解决。

想知道在不使用任何额外线程/greenlets/processes 的情况下使用 asyncio 实现这一目标的最佳方法是什么

编辑


在这里发布问题之前,我已经尝试过这种方法:

我对使用 python 进行异步编程完全陌生。我尝试了收集方法,但是我的实现方法的缺陷是 example_function() 的第二次迭代不会异步生成 POST req。我知道 asyncio.gather() 基本上为传递给它的每个函数安排了一个任务,我有一个任务在等待,它继续执行下一个任务。但是,我需要永远在循环中运行 example_function() 而不仅仅是n

0 投票
0 回答
387 浏览

python - Python asyncio vs ThreadPoolExecutor - 纯粹基于 I/O 的任务的结果不一致

我最近遇到了需要尽快获取 URL 列表的问题。

所以很自然地,我设置了一个小测试,看看什么效果最好。


方法 1 - asyncio


方法 2 - ThreadPoolExecutor


2013 MacBook pro 上的结果

数字海洋 5 美元服务器上的结果

Google colab上的结果


问题

  1. 这种不一致的原因是什么?为什么服务器和本地机器上的赢家不同?
  2. 为什么服务器上的两个测试都比较慢?在具有更快网络连接的服务器上,纯网络任务不应该更快吗?

完整代码为 github gist

0 投票
1 回答
3642 浏览

python - 上传多个文件 UploadFiles FastAPI

例子

这是我的代码:

我向这个服务器发送请求(这些特定的 url 只是在这里举例):

我正在尝试加载包含在 url 中的图像,然后形成它们的批次并将它们发送到 FastAPI 服务器。但它不起作用。我收到以下错误:

如何解决我的问题并能够通过 httpx 将多个文件发送到 FastAPI?

0 投票
0 回答
95 浏览

python-3.x - 为什么我的 HTTP 代理没有连接到 HTTPS 网站?

我试图了解为什么代理没有连接到网站,而是显示我的 IP

当我尝试这样做时,它将显示我的 IP,而不是我选择的 IP。我希望能够使用我的代理连接到网站

0 投票
1 回答
258 浏览

python - 并行请求在使用 asyncio 恰好 100 个请求后无限阻塞

我试过同时使用 httpx 和 aiohttp,两者都有这个硬编码限制。

输出 -

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99

两个库都停留在 99

但是,如果每个请求都使用新的 Session ,则不会发生这种情况。

我究竟做错了什么?asyncio 的全部意义不是让这样的事情变得简单吗?


我尝试用线程、zmq 和请求重新编写它,它工作得很好 -

0 投票
1 回答
635 浏览

python - 可以从事件循环中返回异步生成器数据吗?

我想使用httpx从协程内的多个同时 HTTP 流请求中读取数据,并将数据返回给运行事件循环的非异步函数,而不仅仅是返回最终数据。

但是,如果我让我的异步函数产生而不是返回,我会收到抱怨,asyncio.as_completed()loop.run_until_complete()期望协程或 Future,而不是异步生成器。

所以我可以让它工作的唯一方法是收集每个协程内的所有流数据,一旦请求完成就返回所有数据。然后收集所有协程结果,最后将其返回给非异步调用函数。

这意味着我必须将所有内容保存在内存中,并等到最慢的请求完成后才能获取所有数据,这违背了流式传输 http 请求的全部意义。

有什么办法可以完成这样的事情吗?我当前的愚蠢实现如下所示:

编辑:我也尝试了一些使用asyncio.Queuetrio内存通道的解决方案,但是由于我只能从异步范围内的那些中读取它并没有让我更接近解决方案

编辑 2:我想从非异步生成器中使用它的原因是我想从使用 Django Rest Framework 流 API 的 Django 应用程序中使用它。

0 投票
0 回答
168 浏览

python - 如何使用 httpx 使用预签名的 url(PUT 方法)将文件上传到 S3

由于 httpx 旨在尽可能与请求API兼容,因此我根据答案尝试了以下操作:

这将返回来自 S3 的 501 响应,其中包含以下消息:

我已经确认等效请求调用有效。

我在使用 Python 3.7.7 版和 httpx 0.14.2 版的 Windows 10 上。