为什么我无法连接到这个websocket?

时间:2018-02-11 11:29:33

标签: python sockets websocket

在尝试连接到Coinfloor的websocket API之后,很难获得响应,甚至是令人放心的错误响应。文档:https://github.com/coinfloor/API/blob/master/WEBSOCKET-README.md

  

'命令,回复和通知在文本中遍历WebSocket   具有JSON格式的有效负载的帧。'

这是我的尝试:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = 'api.coinfloor.co.uk'
port = 443
server_ip = socket.gethostbyname('api.coinfloor.co.uk')
payload = '{"method": "WatchTicker","base": int("0xF800", 16),"counter":int("0xFA20",16),"watch":True}'
s.connect((server_ip, port))
s.sendall(payload.encode('utf-8'))
result = s.recv(4096)
print(result)

它只是返回:

b'' 

即。一个空的字节串。

1 个答案:

答案 0 :(得分:2)

因为套接字和WebSocket是完全不同的东西。 AF_INET / SOCK_STREAM套接字是一种使用TCP与远程对等方通信的工具。另一方面,WebSocket是一个二进制协议

  1. 在TCP或TLS的顶部工作。

  2. 必须在数据交换之前执行HTTP握手。

  3. 由于WebSocket是一个相当复杂的协议(see the standard),因此最好的做法是找到一个WebSocket库并使用它而不是尝试从TCP开始实现协议。