Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过squid代理与pusher库连接_Java_Websocket_Proxy_Squid_Pusher - Fatal编程技术网

Java 通过squid代理与pusher库连接

Java 通过squid代理与pusher库连接,java,websocket,proxy,squid,pusher,Java,Websocket,Proxy,Squid,Pusher,我必须连接到上托管的websocket,它们提供了一个 我设法通过cntlm代理在我的开发环境中工作,我的connectionEventListener中有类似的日志 推进器连接的新状态:连接->连接 private final ConnectionEventListener connectionEventListener = new ConnectionEventListener() { @Override public void onConnectionStateChange

我必须连接到上托管的websocket,它们提供了一个

我设法通过cntlm代理在我的开发环境中工作,我的connectionEventListener中有类似的日志

推进器连接的新状态:连接->连接

private final ConnectionEventListener connectionEventListener = new ConnectionEventListener() {
    @Override
    public void onConnectionStateChange(ConnectionStateChange connectionStateChange) {
        log.info("New state for pusher connection: {} -> {}",
                connectionStateChange.getPreviousState(),
                connectionStateChange.getCurrentState());
    }

    @Override
    public void onError(String s, String s1, Exception e) {
        log.error("Some error {} - {} - {}", s, s1, e);
    }
};
问题在于我们的预生产环境,它位于squid代理(v.3.5.12)的后面,我在日志中看到:

New state for pusher connection: DISCONNECTED -> CONNECTING
Exception in thread "Thread-8" java.lang.InternalError: Should not reach here
    at java.net.HttpConnectSocketImpl.doTunneling(HttpConnectSocketImpl.java:181)
    at java.net.HttpConnectSocketImpl.doTunnel(HttpConnectSocketImpl.java:168)
    at java.net.HttpConnectSocketImpl.access$200(HttpConnectSocketImpl.java:44)
    at java.net.HttpConnectSocketImpl$2.run(HttpConnectSocketImpl.java:151)
    at java.net.HttpConnectSocketImpl$2.run(HttpConnectSocketImpl.java:149)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.HttpConnectSocketImpl.privilegedDoTunnel(HttpConnectSocketImpl.java:148)
    at java.net.HttpConnectSocketImpl.connect(HttpConnectSocketImpl.java:111)
    at java.net.Socket.connect(Socket.java:589)
    at com.pusher.java_websocket.client.WebSocketClient.run(WebSocketClient.java:165)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at java.net.HttpConnectSocketImpl.doTunneling(HttpConnectSocketImpl.java:179)
    ... 10 more
Caused by: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 403 Forbidden"
    at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2084)
    ... 15 more
我的问题是,是否有人在squid代理之后使用java中pusher的WebSocket

更新:
问题解决了,我们的squid代理缺少一些允许连接的规则。

我不知道您是如何解决问题的,因为我最近遇到了同样的问题

URL在内部squid代理中被列为白名单,但是Pusher java客户端库当前实现的问题是(Pusher的java websocket客户机版本1.4.1),构造函数使用主机地址(ws.pusherapp.com)创建InetAddress,这将导致URL解析为IP地址

然后库尝试打开一个套接字(使用代理)到解析的IP地址,而不是使用URL地址打开套接字连接。这对于代理来说是有问题的,因为Pusher使用AWS,并且URL被动态解析为随机的AWS IP地址

我可以通过如下方式修补
com.pusher.java\u websocket.client
包中的
WebSocketClient.java
来改变这种行为

public void run()
方法中,原始行是:

this.socket.connect(新的InetSocketAddress(this.uri.getHost(),this.getPort()),this.connectTimeout)

我把它换成了
this.socket.connect(InetSocketAddress.createUnresolved(this.uri.getHost(),this.uri.getPort()),this.connectTimeout)


InetScoketAddress
的第二个构造函数不使用DNS解析URL,库使用URL地址向推送服务器发出请求。

根错误是代理返回“HTTP/1.1 403禁止”,这表示您需要某种身份验证或设置某些权限才能连接。squid代理是否有登录要求?或者,在预生产环境中,它背后的服务器是否需要您登录。身份验证是关键,我们添加了一些规则,允许来自部署守护进程的机器的所有通信。但我们还有其他一些规则取消了这个。问题解决了。