Jelajahi Sumber

websocket设置代理的例子

skyfffire 2 tahun lalu
induk
melakukan
3be991db31
3 mengubah file dengan 102 tambahan dan 105 penghapusan
  1. 50 101
      Cargo.lock
  2. 3 1
      Cargo.toml
  3. 49 3
      tests/binance_ws_test.rs

+ 50 - 101
Cargo.lock

@@ -64,7 +64,6 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
 name = "as-market-binance-okx-spot"
 version = "0.1.0"
 dependencies = [
- "binance",
  "chrono",
  "ndarray",
  "reqwest",
@@ -75,6 +74,8 @@ dependencies = [
  "serde_json",
  "time 0.2.27",
  "tokio",
+ "tungstenite",
+ "url",
 ]
 
 [[package]]
@@ -116,22 +117,6 @@ version = "0.21.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
 
-[[package]]
-name = "binance"
-version = "0.20.2"
-source = "git+https://github.com/wisespace-io/binance-rs.git#0a7128d812b05953ee9564f04b76dd14df079b28"
-dependencies = [
- "error-chain",
- "hex",
- "hmac",
- "reqwest",
- "serde",
- "serde_json",
- "sha2",
- "tungstenite",
- "url",
-]
-
 [[package]]
 name = "bitflags"
 version = "1.3.2"
@@ -158,9 +143,9 @@ dependencies = [
 
 [[package]]
 name = "block-buffer"
-version = "0.10.4"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
 dependencies = [
  "generic-array",
 ]
@@ -311,25 +296,13 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
 [[package]]
 name = "digest"
-version = "0.10.7"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
 dependencies = [
- "block-buffer",
- "crypto-common",
- "subtle",
+ "generic-array",
 ]
 
 [[package]]
@@ -368,15 +341,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "error-chain"
-version = "0.12.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
-dependencies = [
- "version_check",
-]
-
 [[package]]
 name = "fastrand"
 version = "2.0.0"
@@ -434,12 +398,6 @@ version = "0.3.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
 
-[[package]]
-name = "futures-io"
-version = "0.3.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
-
 [[package]]
 name = "futures-sink"
 version = "0.3.28"
@@ -459,12 +417,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
 dependencies = [
  "futures-core",
- "futures-io",
  "futures-task",
- "memchr",
  "pin-project-lite",
  "pin-utils",
- "slab",
 ]
 
 [[package]]
@@ -537,21 +492,6 @@ version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
 
-[[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
-name = "hmac"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
-dependencies = [
- "digest",
-]
-
 [[package]]
 name = "http"
 version = "0.2.9"
@@ -666,6 +606,15 @@ dependencies = [
  "hashbrown 0.12.3",
 ]
 
+[[package]]
+name = "input_buffer"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413"
+dependencies = [
+ "bytes",
+]
+
 [[package]]
 name = "ipnet"
 version = "2.8.0"
@@ -847,6 +796,12 @@ version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
 [[package]]
 name = "openssl"
 version = "0.10.56"
@@ -1247,9 +1202,6 @@ name = "serde"
 version = "1.0.183"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
-dependencies = [
- "serde_derive",
-]
 
 [[package]]
 name = "serde_derive"
@@ -1286,23 +1238,25 @@ dependencies = [
 ]
 
 [[package]]
-name = "sha1"
-version = "0.6.1"
+name = "sha-1"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
 dependencies = [
- "sha1_smol",
+ "block-buffer",
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+ "opaque-debug",
 ]
 
 [[package]]
 name = "sha1"
-version = "0.10.5"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
 dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
+ "sha1_smol",
 ]
 
 [[package]]
@@ -1311,17 +1265,6 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
 
-[[package]]
-name = "sha2"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
 [[package]]
 name = "signal-hook-registry"
 version = "1.4.1"
@@ -1372,6 +1315,17 @@ dependencies = [
  "windows-sys",
 ]
 
+[[package]]
+name = "socks"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c3dbbd9ae980613c6dd8e28a9407b50509d3803b57624d5dfe8315218cd58b"
+dependencies = [
+ "byteorder",
+ "libc",
+ "winapi",
+]
+
 [[package]]
 name = "standback"
 version = "0.2.17"
@@ -1420,7 +1374,7 @@ dependencies = [
  "serde",
  "serde_derive",
  "serde_json",
- "sha1 0.6.1",
+ "sha1",
  "syn 1.0.109",
 ]
 
@@ -1430,12 +1384,6 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
 
-[[package]]
-name = "subtle"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
-
 [[package]]
 name = "syn"
 version = "1.0.109"
@@ -1658,19 +1606,20 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
 
 [[package]]
 name = "tungstenite"
-version = "0.18.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788"
+version = "0.13.0"
+source = "git+https://github.com/PrivateRookie/tungstenite-rs.git?rev=1d9289276518e5ab7e5194126d40b441d8938375#1d9289276518e5ab7e5194126d40b441d8938375"
 dependencies = [
  "base64 0.13.1",
  "byteorder",
  "bytes",
  "http",
  "httparse",
+ "input_buffer",
  "log",
  "native-tls",
  "rand",
- "sha1 0.10.5",
+ "sha-1",
+ "socks",
  "thiserror",
  "url",
  "utf-8",

+ 3 - 1
Cargo.toml

@@ -15,5 +15,7 @@ serde_derive = "1.0.183"
 serde_json = "1.0.104"
 ndarray = "0.15"
 time = "0.2"
-binance = { git = "https://github.com/wisespace-io/binance-rs.git" }
 tokio = {version = "1.31.0", features = ["full"]}
+
+tungstenite = {git="https://github.com/PrivateRookie/tungstenite-rs.git", rev="1d9289276518e5ab7e5194126d40b441d8938375"}
+url = "2.4.0"

+ 49 - 3
tests/binance_ws_test.rs

@@ -1,4 +1,50 @@
-#[test]
-fn it_works() {
-    println!("Hello World.")
+use tungstenite::client::connect_with_proxy;
+use tungstenite::protocol::WebSocketConfig;
+use tungstenite::Message;
+use std::net::{SocketAddr, IpAddr, Ipv4Addr};
+use url::Url;
+
+#[tokio::test]
+async fn test() {
+    let request_url = Url::parse("wss://stream.binance.com:443/ws/btcusdt@depth10@100ms").unwrap();
+    let proxy_address = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 9080);
+    let websocket_config = Some(WebSocketConfig {
+        max_send_queue: Some(16),
+        max_message_size: Some(16 * 1024 * 1024),
+        max_frame_size: Some(16 * 1024 * 1024),
+        accept_unmasked_frames: false,
+    });
+    let max_redirects = 5;
+
+    let (mut socket, response) =
+        connect_with_proxy(request_url, proxy_address, websocket_config, max_redirects)
+            .expect("Can't connect");
+
+    // socket
+    //     .write_message(Message::Text("Hello WebSocket".into()))
+    //     .unwrap();
+
+    loop {
+        let msg = socket.read_message();
+
+        println!("有消息了");
+
+        match msg {
+            Ok(Message::Text(text)) => {
+                println!("Received text: {}", text);
+            }
+            Ok(Message::Binary(bin)) => {
+                println!("Received binary: {:?}", bin);
+            }
+            Ok(Message::Ping(_)) | Ok(Message::Pong(_)) | Ok(Message::Close(_)) => {
+                // Handle control frames if necessary.
+            }
+            Err(error) => {
+                println!("Error receiving message: {}", error);
+                break;
+            }
+        }
+    }
+
+    socket.close(None).unwrap();
 }