我正在调用以下JSON-EndPoint以检索reference_number
.
对 3 个请求使用正常for
循环,我已经能够为每个请求接收一个新令牌,如下所示:
import httpx
for _ in range(3):
r = httpx.get(
'https://zenpay.zenithpayments.com.au/CyberSource/getsignedobject?programId=2&siteId=2')
print(r.json()['signedObject']['reference_number'])
输出:
P2S2M1R20210307004644
P2S2M1R20210307004645
P2S2M1R20210307004646
现在,我正在尝试发送一个async
请求,其中每个请求都使用它自己的会话,但对于同时发送的所有请求,我一直获得相同的值。
import trio
import httpx
async def main():
async with trio.open_nursery() as nurse:
async def call():
async with httpx.AsyncClient(timeout=None) as client:
r = await client.get('https://zenpay.zenithpayments.com.au/CyberSource/getsignedobject?programId=2&siteId=2')
print(r.json()['signedObject']['reference_number'])
for _ in range(3):
nurse.start_soon(call)
if __name__ == "__main__":
trio.run(main)
输出:
P2S2M1R20210307004912
P2S2M1R20210307004912
P2S2M1R20210307004912
注意:我知道每个请求的值都会增加 1,但我不能使用这个解决方案,因为这个值需要由 生成,
BackEnd API
以便稍后使用它进行身份验证。
另一方面,我认为它与根据源 IP 地址进行控制无关,因为API
一旦您单独点击,就已经生成了令牌。
我可以在请求之间设置一个时间延迟,但这会减慢我的整个操作。
我已经验证每个客户端都代表它自己的,这意味着每个请求的底层套接字标识符都不同。
print(client, r.json()['signedObject']['reference_number'])
输出:
<httpx.AsyncClient object at 0x000001EF7815BF40> P2S2M1R20210307005512
<httpx.AsyncClient object at 0x000001EF78185250> P2S2M1R20210307005512
<httpx.AsyncClient object at 0x000001EF7817C670> P2S2M1R20210307005512
这里有线索吗?因为我什至试图玩,HTTP Transport
但我不知道该怎么做!