Прокси-соединение HTTP / 2 Apple APN с Jetty HttpClient 9.3.6.v20151106

Я пытаюсь отправить push-уведомление через новый интерфейс Apple APN HTTP / 2, используя аутентифицированный HTTP-прокси (например, Squid).

Используя Jetty HTTPClient 9.3.6.v20151106 Мне удалось отправить уведомление без использования прокси, следуя коду на эту страницу.

API Apple APN HTTP / 2 требует расширения ALPN TLS. Я использую JavaSE 1.8.0_u40, поэтому я изменил путь к загрузочному классу JVM с помощью alpn-boot-8.1.3.v20150130.jar:

-Xbootclasspath/p:/latinia/dev/LIMSP/Collectors/AppleHTTP2/alpn-boot-8.1.3.v20150130.jar

Сейчас пытаюсь установить TLS-туннель через прокси-сервер Squid. Обращаясь к документации Jetty, прокси настроен следующим образом:

        HttpProxy httpProxy = new HttpProxy("proxyHost", 3128);
        ProxyConfiguration proxyConfig = client.getProxyConfiguration();
        proxyConfig.getProxies().add(httpProxy);

Когда я запускаю свой код с установленным прокси, ALPN API выдает внутреннее исключение:

Caused by: java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
at org.eclipse.jetty.alpn.ALPN.put(ALPN.java:149)
at org.eclipse.jetty.alpn.client.ALPNClientConnection.<init>(ALPNClientConnection.java:44)
at org.eclipse.jetty.alpn.client.ALPNClientConnectionFactory.newConnection(ALPNClientConnectionFactory.java:52)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2.newConnection(HttpClientTransportOverHTTP2.java:150)
at org.eclipse.jetty.client.HttpProxy$HttpProxyClientConnectionFactory.newConnection(HttpProxy.java:84)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2.lambda$doStart$0(HttpClientTransportOverHTTP2.java:80)
at org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2$$Lambda$2/1340328248.newConnection(Unknown Source)
at org.eclipse.jetty.http2.client.HTTP2Client$ClientSelectorManager.newConnection(HTTP2Client.java:334)
at org.eclipse.jetty.io.ManagedSelector.createEndPoint(ManagedSelector.java:411)
at org.eclipse.jetty.io.ManagedSelector.access$1600(ManagedSelector.java:56)
at org.eclipse.jetty.io.ManagedSelector$CreateEndPoint.run(ManagedSelector.java:587)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.execute(ExecuteProduceConsume.java:101)
at org.eclipse.jetty.io.ManagedSelector.run(ManagedSelector.java:136)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Thread.java:745)

Я понятия не имею, что происходит ¿Кому-нибудь удалось это сделать?


person Ricardo    schedule 19.01.2016    source источник


Ответы (2)


Jetty 9.3.8 исправляет ряд ошибок, связанных с обработкой прямого прокси, как в вашем примере. Попробуйте.

person sbordet    schedule 15.03.2016

Я думаю, вы не можете использовать эту версию.

Версия 9.3.8 устраняет ваше исключение NPE.

Однако HttpProxy использует HttpClient, который использует только один transportClient. Когда вы пытаетесь связаться с вашим прокси, он использует HTTP / 2 (PRI * HTTP / 2.0) вместо HTTP / 1.1.

Я работаю над transportClient, который может использовать http 1.1 или http 2. Выбор зависит от согласования ALPN. Пытаюсь интегрировать прокси.

https://github.com/stephanemartin/jettyTests/tree/master/src/main/java/testjettys2.

Ошибка: https://github.com/eclipse/jetty.project/issues/250

person Stephane MARTIN    schedule 25.03.2016