问题标签 [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 回答
121 浏览

asynchronous - 带有 httpx.AsyncClient 的 pytest 找不到新创建的数据库记录

我正在尝试使用 FastAPI 设置 pytesthttpx.AsyncClient和 sqlalchemy AsyncSession。除了异步的东西外,所有东西实际上都模仿了FastAPI Fullstack repo中的测试。

CRUD 单元测试没有问题。使用 httpx lib 中的 AsyncClient 运行 API 测试时会出现此问题。

问题是,客户端发出的任何请求都只能访问在初始化(设置)客户端夹具之前创建的用户(在我的情况下)。

我的 pytest conftest.py设置是这样的:

所以在这种情况下,在运行 API 测试期间只有超级用户test.superuser@example.com和普通用户test.user@example.com可用。例如,下面的代码能够很好地获取访问令牌:

但是,下面的修改代码没有 - 在这里我尝试插入新用户,然后登录以获取访问令牌。

这里发生了什么 ?感谢任何帮助!

0 投票
1 回答
50 浏览

python - Async check of several hundred proxies

I need to check several hundred proxy servers and get the number of not working. Script for this

Proxies in the list, I have given a simple version.

It takes 55 seconds to check 250 working proxies. I can't wait that long, need to increase the execution speed. How can this be done using async?

0 投票
0 回答
64 浏览

python - 使用代理时,我的请求设置为 HTTP/1

使用httpx允许我向目标站点发出 HTTP/2 请求的库。

但是,当我使用代理时,它似乎会自动将我的请求设置为 HTTP/1。

IE

这将打印 HTTP/2

但是像这样使用代理也是一样的client = httpx.AsyncClient(http2=True, proxies=someproxydictionary)

它打印 HTTP/1

为什么只有在通过代理路由时才会发生这种行为?

0 投票
1 回答
41 浏览

python - 当异常计数超过工作人员计数时,如何使用 return_exceptions=True 获取 httpx.gather() 以完成任务队列?

我第一次将 asyncio 与 httpx.AsyncClient 一起使用,并试图弄清楚当其中一些任务可能失败时如何完成我的任务列表。我正在使用我在几个地方找到的模式,在这些地方我用协程函数填充了一个 asyncio 队列,并有一组从 asyncio.gather 内部排队的工作进程。通常,如果执行工作的函数引发异常,您将看到整个脚本在该处理期间失败,并报告异常以及 a RuntimeWarning: coroutine foo was never awaited,表明您从未完成您的列表。

我找到了return_exceptionsasyncio.gather 的选项,这有所帮助,但并不完全。在我得到异常的次数与我在调用gather. 以下是演示该问题的简单脚本。

此脚本的一次运行输出:

在这里,您看到我们通过了总共 14 个 url 中的 8 个,但是当我们遇到 4 个错误时,脚本结束并忽略了其余的 url。

我想要做的是让脚本完成完整的 url 集,但最后告诉我错误。有没有办法在这里做到这一点?可能是我必须将所有内容包装在process_url()一个try/except块中并使用 aiofile 之类的东西最终将它们转储出来?

更新 需要明确的是,这个演示脚本是对我真正在做的事情的简化。我的真实脚本是几十万次访问少量服务器 api 端点。使用一组工作人员的目的是避免压倒我正在访问的服务器[它是测试服务器,而不是生产服务器,因此它不打算处理大量请求,尽管数量大于 4 8-)]。我愿意学习替代品。

0 投票
0 回答
53 浏览

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

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

它能够为每个路径代理容器 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 中有一些查询参数时它会失败。

例如。

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

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

0 投票
0 回答
162 浏览

python - 如何在 Pytest 中模拟 httpx.AsyncClient()

我需要为用于从 API 获取数据的函数编写测试用例。在那里我使用 httpx.AsyncClient() 作为上下文管理器。但我不明白如何为该功能编写测试用例。

我需要在不调用 API 的情况下编写测试用例。所以我相信在这种情况下我需要模拟client.post()但我不明白该怎么做。如果有人可以帮助我解决这个问题,那对我来说真的很有帮助。

此图像还包括我的代码块

0 投票
1 回答
52 浏览

python - 在 Pytest 测试函数中缓存异步请求

我已经实现了一个测试函数,pytest它从文件中加载数据,将其转换为 Python 对象,并为每个测试提供一个新对象。

这些对象中的每一个都包含我需要向服务器发出的请求和预期的响应,函数如下所示:

很多时候,我发送了许多包含相同http端点的请求,body因此响应相同,但我正在测试响应中的不同内容。

正因为如此,我想实现一个内存缓存,这样每次测试运行时,相同的请求就不会被实现两次。

我试图做的是创建一个请求对象,它有自己的__hash__实现并使用@asyncstdlib.lru_cacheon 函数,它似乎不起作用。

我正在使用的客户端:httpx.AsyncClient也实现__hash__了,它来自一个pytest.fixtureinconftest.py并且它的范围为“会话”:

0 投票
0 回答
44 浏览

python - 无法弄清楚 post 请求参数

我正在尝试查询以下网站

通过选择下面的高级搜索并查询该模式QW=部队

在此处输入图像描述

我注意到XHR对以下端点的请求

在此处输入图像描述

我认为查询模式QW=部队在其中编码,SearchStateJson但我不知道它是如何实现的!

这是它:

0 投票
0 回答
34 浏览

python - 将 JSON 数据作为多部分形式的数据发送

我正在尝试访问期望多部分形式数据的端点:

带参数content type application/json

我可以通过 Postman 访问这个端点,选择一个 JSON 文件。

但是,当我在内存中有一个 JSON 字符串并尝试提交一个httpx发布请求时,我不确定如何对我的字符串进行编码。

我正在发送一个httpx帖子:

我收到:

我需要以json_string其他方式编码吗?我想如果我把它写到一个文件中然后打开这个文件,我可以让它工作,但我不得不这样做似乎很奇怪。

0 投票
0 回答
81 浏览

python - uvicorn 随机错误“收到无效的 HTTP 请求”

使用最新的 uvicorn[标准] 0.17.1。尝试config(timeout_keep_alive=0, http='h11',...)了默认的(http='auto',它使用 httptools)。使用uvloop.

在另一个进程中运行服务器;使用httpx. 不断收到“无效的 HTTP 请求”(httptools 和 h11 都有问题,看起来性质相似)。随机出现。再打几次电话后,有时会失败。

使用starlette TestClient相同的数据可以正常工作。

刚刚得到一些详细的错误信息(但请注意:具有相同客户端有效负载的此调用并不总是失败):

请帮忙。谢谢!