いろいろ備忘録

雑記です。

okhttp3のwebsocketでのサブプロトコル定義

クライアントは、WebSocketコネクション確立時に、対応可能なサブプロトコル一覧をSec-WebSocket-Protocolヘッダで提示します。

OkHttpではRequestクラスでヘッダを追加出来ます。

そのClientが送るリクエスト全てまたは条件を満たすものに追加したいならInterceptorを使用しましょう。

今回のケースではWebSocketでのrequestはひとつだったので使いませんでした。

サブプロトコル名はアプリケーション側で勝手に決めて大丈夫なものなので、各自サーバが対応する適切なものに変えましょう。

Interceptorを使用しないとき

Request request = new Request.Builder()
.addHeader("Sec-WebSocket-Protocol", "test")
.url(WS_URL)
.build();

Interceptorを使用するとき

Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request req = chain.request()
.newBuilder()
.addHeader("Sec-WebSocket-Protocol", "test")
.build();
return chain.proceed(req);
}
};

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();