【发布时间】:2018-06-23 14:20:28
【问题描述】:
我正在尝试建立 websocket 连接,但出现错误:
请求标头中的来源不正确。
我的代码是:
def create_signature():
timestamp = int(datetime.datetime.now().timestamp())
string = "{}{}".format(timestamp, key)
return timestamp, hmac.new(secret.encode(), string.encode(), hashlib.sha256).hexdigest()
def auth_request():
timestamp, signature = create_signature()
return json.dumps({'e': 'auth',
'auth': {'key': key, 'signature': signature, 'timestamp': timestamp}})
def main():
ws = create_connection(websocketURL)
authentication = auth_request()
ws.send(authentication)
result = ws.recv()
print(result)
ws.close()
我正在运行main 函数。 auth_request 返回一个有效的 json。我正在尝试获取有效的响应对象,但连接失败。我已经导入了相关库并且没有任何语法错误。所有变量都在另一个文件中定义。
如何解决这个问题,这是我第一次使用网络套接字?
【问题讨论】:
-
代码本身可能没问题 - 问题在于请求源标头和类似 CSRF/CORS 的行为 - 即服务器拒绝来自不同/不受信任域的请求。请参阅 tools.ietf.org/id/draft-abarth-origin-03.html 和 developer.mozilla.org/en-US/docs/Web/HTTP/CORS 了解有关此类检查的 http 实现的一些背景知识。
-
为什么是 HTTP CORS 问题,Web 套接字的全部意义不在于使用 TCP 而不是 HTTP?
-
@WMios:不;这将破坏整个网络的安全模型。 Web Sockets 是一种类似 HTTP 的协议,具有类似的限制。
-
@WMios:我相信它可能不会被实现为 CORS,但服务可以查看来源并选择拒绝来自不同域的来源。将更新评论以澄清。
-
@SLaks,谢谢,我没有意识到这一点!你如何在 python 中实现 websocket 标头?