Соединение-концентратор не вызывает метод для сервера, использующего SignalR в Python - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь установить sh хаб-соединение и вести переговоры через API, предоставленный биржевой компанией. Это фрагмент кода, разработанный с использованием Signalr_aio в Python.

from signalr_aio import Connection
import asyncio
from requests import Session

async def pushMessage(**msg):
    print(msg)
    if 'R' in msg and type(msg['R']) is not bool:
        token = msg['R']
        sessionRealtime.headers.update({'Authorization': 'Bearer {}'.format(token)})

server_url = 'https://edbi.ephoenix.ir/realtime'
sessionRealtime = Session()
connection = Connection(server_url, session=sessionRealtime)
connection.received += pushMessage
hub = connection.register_hub('omsclienttokenhub')
hub.server.invoke('GetAPIToken', 'xxxxxxxxx', 'yyyyyyyyyy')
hub = connection.register_hub('omsclienthub')
connection.start()

Я попробовал метод GetTime, и он успешно вернул время ,

hub.server.invoke('GetTime')

{'R': '00: 19: 10 ',' I ':' 2 '}

Однако я получаю сообщение об ошибке, когда Я вызываю метод GetInstrumentList,

hub.server.invoke('GetInstrumentList')

{'R': {'ex': {'i': Нет, 'm': 'Ссылка на объект не установлена ​​на экземпляр объект. '}},' I ':' 1 '}

Я полагаю, что существует проблема с обновлением заголовка запроса? Или я должен транспортировать токен как строку запроса в измененном URL-адресе?!

1 Ответ

1 голос
/ 16 апреля 2020

Попробуйте приведенный ниже код

from requests import Session
from signalr import Connection
import asyncio

server_url = 'https://edbi.ephoenix.ir/realtime'

async def pushMessage(**msg):
    print(msg)
    if 'R' in msg and type(msg['R']) is not bool:
        token = msg['R']
        global server_url
        server_url = 'https://edbi.ephoenix.ir/realtime' +  "?Token={}".format(token)

with Session() as session:
    #create a connection  
    connection = Connection(server_url, session)
    connection.received += pushMessage
    hub = connection.register_hub('omsclienttokenhub')
    hub.server.invoke('GetAPIToken', 'xxxxxxxxx', 'yyyyyyyyyy')
    hub = connection.register_hub('omsclienthub')
    connection.start()

Я взял некоторые ссылки из этой ссылки

...