【问题标题】:How to get dynamic websocket URL?如何获取动态 websocket URL?
【发布时间】:2018-01-21 08:00:02
【问题描述】:

我正在尝试从此页面https://upbit.com/exchange?code=CRIX.UPBIT.KRW-BTC 的websocket 获取数据,但它的websocket URL 似乎是动态的,不能重复使用,第二次连接它时,它不再向我发送数据,只有第一个连接有效。

目前,我在这个JS文件https://cdn.upbit.com/vender-bundle-03c1ef05e3ad23870adb.js中找到了一个函数,

var a = this,
c = o.addPath(t, "/websocket");
c = "https" === c.slice(0, 5) ? "wss" + c.slice(5) : "ws" + c.slice(4), 
this.url = c, this.ws = new u(this.url, [], n)

有成千上万个同名的函数n(),所以我在这里一无所知,有什么想法吗?谢谢!

【问题讨论】:

  • 您在此处省略了代码的所有相关部分。无论如何,请联系运行此程序的人员,以便您获得适当的 API。
  • 本网站不提供websocket API

标签: javascript websocket


【解决方案1】:

在这种情况下,您不需要动态网址。您可以按照以下答案中的答案中所述选择一个并使用它

https://stackoverflow.com/a/48457699/2830850

const WebSocket = require("ws")
const ws = new WebSocket("wss://example.com/sockjs/299/enavklnl/websocket",null,{
    headers: {
        "Cookie":"<cookie data noted earlier>",
        "User-Agent": "<Your browser agent>"
    },
    origin: "https://example.com",
})
const opening_message = '["[{\\"ticket\\":\\"ram macbook\\"},{\\"type\\":\\"recentCrix\\",\\"codes\\":[\\"CRIX.UPBIT.KRW-BTC\\",\\"CRIX.BITFINEX.USD-BTC\\",\\"CRIX.BITFLYER.JPY-BTC\\",\\"CRIX.OKCOIN.CNY-BTC\\",\\"CRIX.KRAKEN.EUR-BTC\\",\\"CRIX.UPBIT.KRW-DASH\\",\\"CRIX.UPBIT.KRW-ETH\\",\\"CRIX.UPBIT.KRW-NEO\\",\\"CRIX.UPBIT.KRW-BCC\\",\\"CRIX.UPBIT.KRW-MTL\\",\\"CRIX.UPBIT.KRW-LTC\\",\\"CRIX.UPBIT.KRW-STRAT\\",\\"CRIX.UPBIT.KRW-XRP\\",\\"CRIX.UPBIT.KRW-ETC\\",\\"CRIX.UPBIT.KRW-OMG\\",\\"CRIX.UPBIT.KRW-SNT\\",\\"CRIX.UPBIT.KRW-WAVES\\",\\"CRIX.UPBIT.KRW-PIVX\\",\\"CRIX.UPBIT.KRW-XEM\\",\\"CRIX.UPBIT.KRW-ZEC\\",\\"CRIX.UPBIT.KRW-XMR\\",\\"CRIX.UPBIT.KRW-QTUM\\",\\"CRIX.UPBIT.KRW-LSK\\",\\"CRIX.UPBIT.KRW-STEEM\\",\\"CRIX.UPBIT.KRW-XLM\\",\\"CRIX.UPBIT.KRW-ARDR\\",\\"CRIX.UPBIT.KRW-KMD\\",\\"CRIX.UPBIT.KRW-ARK\\",\\"CRIX.UPBIT.KRW-STORJ\\",\\"CRIX.UPBIT.KRW-GRS\\",\\"CRIX.UPBIT.KRW-VTC\\",\\"CRIX.UPBIT.KRW-REP\\",\\"CRIX.UPBIT.KRW-EMC2\\",\\"CRIX.UPBIT.KRW-ADA\\",\\"CRIX.UPBIT.KRW-SBD\\",\\"CRIX.UPBIT.KRW-TIX\\",\\"CRIX.UPBIT.KRW-POWR\\",\\"CRIX.UPBIT.KRW-MER\\",\\"CRIX.UPBIT.KRW-BTG\\",\\"CRIX.COINMARKETCAP.KRW-USDT\\"]},{\\"type\\":\\"crixTrade\\",\\"codes\\":[\\"CRIX.UPBIT.KRW-BTC\\"]},{\\"type\\":\\"crixOrderbook\\",\\"codes\\":[\\"CRIX.UPBIT.KRW-BTC\\"]}]"]'
ws.on('open', function open() {
    console.log("opened");
});

ws.on('message', function incoming(data) {
    if (data == "o" || data == "h") {
        console.log("sending opening message")
        ws.send(opening_message)
    }
    else {
        console.log("Received", data)

    }
});

【讨论】:

  • 惊人的答案,@Tarun 在这里的另一个问题下进行了出色的分析stackoverflow.com/a/48457699/381712
  • 不过只有一个小问题,我不想在我的代码中硬编码这个 URL wss://example.com/sockjs/299/enavklnl/websocket,我想自动获取它。
  • @soulmachine,我认为生成的 url 只是随机的,并且可能具有影响数据的逻辑。所以你可以自己生成一个随机的数字和字符串然后尝试,如果你不想硬编码
猜你喜欢
  • 2017-06-13
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
相关资源
最近更新 更多