Как отделить асинхронные запросы от базового запроса сокета
Я вызываю следующий JSON-EndPoint , чтобы получить следующее значение
reference_number
.
Используя нормальный
for
цикл для 3 запросов, я смог получить новый токен для каждого запроса, как показано ниже:
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
но я не мог понять, что с этим делать!