Как отделить асинхронные запросы от базового запроса сокета

Я вызываю следующий 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 но я не мог понять, что с этим делать!

0 ответов

Другие вопросы по тегам