앞서 "기본 정보"에서 확인한것과 같이 웹소켓은 Public 데이터와 Private 데이터로 나누어져있습니다. Public 데이터를 수신하기 위해서는 별다른 인증이 필요 없습니다. Private 데이터를 수신하기 위해서는 Websocket 연결 시 인증에 성공해야합니다.
- REST API 에서와 동일하게
Authorization
헤더를 통해 인증을 진행합니다. - 인증 가능한 요청 만들기 의 "JWT 인증 토큰 만들기" 를 참고하시기 바랍니다.
(예시) Header 에 인증 정보를 담아 Websocket 연결
const jwt = require("jsonwebtoken");
const {v4: uuidv4} = require('uuid');
const WebSocket = require("ws");
const payload = {
access_key: "발급받은 Access key",
nonce: uuidv4(),
};
const jwtToken = jwt.sign(payload, "발급받은 Secret key");
const ws = new WebSocket("wss://api.upbit.com/websocket/v1/private", {
headers: {
authorization: `Bearer ${jwtToken}`
}
});
ws.on("open", () => {
console.log("connected!");
// Request after connection
ws.send('[{"ticket":"test example"},{"type":"myOrder"}]');
});
ws.on("error", console.error);
ws.on("message", (data) => console.log(data.toString()));
ws.on("close", () => console.log("closed!"));
import jwt # PyJWT
import uuid
import websocket # websocket-client
def on_message(ws, message):
# do something
data = message.decode('utf-8')
print(data)
def on_connect(ws):
print("connected!")
# Request after connection
ws.send('[{"ticket":"test example"},{"type":"myOrder"}]')
def on_error(ws, err):
print(err)
def on_close(ws, status_code, msg):
print("closed!")
payload = {
'access_key': "발급받은 Access key",
'nonce': str(uuid.uuid4()),
}
jwt_token = jwt.encode(payload, "발급받은 Secret key");
authorization_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorization_token}
ws_app = websocket.WebSocketApp("wss://api.upbit.com/websocket/v1/private",
header=headers,
on_message=on_message,
on_open=on_connect,
on_error=on_error,
on_close=on_close)
ws_app.run_forever()