Я пытаюсь подключиться к веб-сокету через мой собственный http-прокси, используя библиотеку Java okhttp3
.
Я настроил прокси на экземпляре EC2 и правильно настроил группы безопасности. Я могу подтвердить, что это работает:
time curl -s --proxy http://X.X.X.X:8888 https://api.binance.com/api/v3/ping
real 0m0.597s
user 0m0.040s
sys 0m0.008s
Однако мои попытки подключиться к веб-сокету через прокси не увенчались успехом. Ниже приведен код.
OkHttpClient client = new OkHttpClient.Builder()
.proxy(new Proxy(Type.HTTP, new InetSocketAddress("X.X.X.X", 8888)))
.build();
Request request = new Request.Builder()
.url("wss://fstream.binance.com/stream")
.build();
WebSocket webSocket = client.newWebSocket(request, new WebSocketListener() {
@Override
public void onFailure(final WebSocket webSocket, final Throwable t, final Response response) {
t.printStackTrace();
}
});
Если я удаляю строку .proxy(new Proxy(Type.HTTP, new InetSocketAddress("X.X.X.X", 8888)))
, то она отлично работает, но если у меня есть эта строка, я получаю исключение:
java.io.IOException: Unexpected response code for CONNECT: 403
at okhttp3.internal.connection.RealConnection.createTunnel(RealConnection.kt:447)
at okhttp3.internal.connection.RealConnection.connectTunnel(RealConnection.kt:235)
at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:170)
at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:236)
...
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:112)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:87)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.kt:184)
at okhttp3.RealCall$AsyncCall.run(RealCall.kt:136)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Я в растерянности относительно того, что делать? Я могу получить доступ к прокси через терминал, но не могу подключиться к нему через веб-сокет.