websocket立即关闭连接,而没有消息

时间:2020-10-10 17:47:27

标签: python python-3.x websocket socket.io python-requests

我想从使用SOCKET.IO和WS协议的网站(具有OHLC价格的股票交易网站)获取数据。 到目前为止,这是我尝试过的:

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}

session = requests.Session()

r = session.get("http://api.example.com/socket.io/?EIO=3&transport=polling&t=NKJ9lK8", headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
struc = re.findall('"([^"]*)"', soup.text)
session_id = struc[1]

在这里,我从第一个请求中提取会话ID。然后,我将尝试使用该会话ID打开Websocket连接:

def on_message(ws, message):
    print('message received ..')
    print(message)


def on_error(ws, error):
    print('error happened .. ')
    print(error)


def on_close(ws):
    print("### closed ###")


def on_open(ws):

    print('Opening Websocket connection to the server ... ')
    def run(*args):
        for i in range(3):
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())
headers['Sec-WebSocket-Key'] = str(base64.b64encode(bytes([random.randint(0, 255) for _ in range(16)])), 'ascii')
headers['Sec-WebSocket-Version'] = '13'

cookies = session.cookies.get_dict()
if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp('ws://api.example.com/socket.io/?EIO=3&transport=websocket&sid=' + session_id,
                              header=headers,
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close,
                              cookie="; ".join(["%s=%s" %(i, j) for i, j in cookies.items()]))
    ws.on_open = on_open
    ws.run_forever()

问题是它会打开websocket连接并立即关闭它而不返回消息。我想保持连接状态并继续接收数据。 这是返回的数据:

--- request header ---
GET /socket.io/?EIO=3&transport=websocket&sid=bjVy-kjRSF12-8jWAAHn HTTP/1.1
Upgrade: websocket
Host: api.example.com
Origin: http://api.example.com
Connection: upgrade
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Sec-WebSocket-Key: VeYPFifoqW2Ety8oaOiLqA==
Sec-WebSocket-Version: 13
Cookie: io=bjVy-kjRSF12-8jWAAHn


-----------------------
--- response header ---
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: W5cri3H2jgGirGqkaOdNZsJF3J4=
-----------------------
Opening Websocket connection to the server ...
send: b'\x81\x87\x04\tg\x93Ll\x0b\xffk)W'
send: b'\x88\x82\xe1\t\xab\x8a\xe2\xe1'
### closed ###

我在哪里做错了?

0 个答案:

没有答案
相关问题