Skip to content

Websocket does not support NTLM proxy #1274

Closed
@stonecai

Description

@stonecai

With latest version (2.1.0-alpha1), As the following codes, it works fine while connectiong to server with http; but it is failed for websocket, it alway returns 501 status code. does asynch-http-client support the proxy with NTML schema?

Scenario 1: connecting www.google.com, connection established

String url="http://www.google.com/";
DefaultAsyncHttpClientConfig.Builder configBuilder = new DefaultAsyncHttpClientConfig.Builder();
configBuilder.setWebSocketMaxFrameSize(WEBSOCKET_MAX_FRAME_SIZE);
boolean isWss = SSLConfigurationUtil.isWssConnection(url);
setProxyConfig(configBuilder);
AsyncHttpClientConfig cf = configBuilder.build();
client = new DefaultAsyncHttpClient(cf);
Future<Response> responseFuture = client.prepareGet(url).execute();
int status = responseFuture.get().getStatusCode(); //status ==200, success

Scenario 2: connecting to websocket, failed. return 501 status code

String url="ws://192.168.1.100/hello";
DefaultAsyncHttpClientConfig.Builder configBuilder = new DefaultAsyncHttpClientConfig.Builder();
configBuilder.setWebSocketMaxFrameSize(WEBSOCKET_MAX_FRAME_SIZE);
boolean isWss = SSLConfigurationUtil.isWssConnection(url);
setProxyConfig(configBuilder);
AsyncHttpClientConfig cf = configBuilder.build();
client = new DefaultAsyncHttpClient(cf);
WebSocketUpgradeHandler.Builder wsHandlerBuilder = new WebSocketUpgradeHandler.Builder();
wsHandlerBuilder.addWebSocketListener(new NettyWebSocketByteListener());
WebSocketUpgradeHandler upgradeHandler = wsHandlerBuilder.build();
WebSocket session = client.prepareGet(url).execute(upgradeHandler).get(); //Invalid Status Code 501
private void setProxyConfig(Builder configBuilder) {
    try {
        ProxyServer.Builder psBuilder = new ProxyServer.Builder(proxyHost, Integer.valueOf(proxyPort));

        Realm.Builder realmBuilder = new Realm.Builder(proxyUsername, proxyPassword);
        realmBuilder.setUsePreemptiveAuth(true);
        realmBuilder.setNtlmDomain(proxyUserDomain);
        realmBuilder.setNtlmHost(proxyHost);
        realmBuilder.setScheme(AuthScheme.NTLM);
        Realm realm = realmBuilder.build();
        psBuilder.setRealm(realm);

        ProxyServer proxyServer = psBuilder.build();
        configBuilder.setProxyServer(proxyServer);
    } catch (Exception e) {
        log.error(e.getMessage(), e);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions