@Test @Disabled void testHttpProxy() { SocketHttpConnectionProvider s = new SocketHttpConnectionProvider(); s.useProxy(ProxyInfo.httpProxy("localhost", 1090, null, null)); HttpResponse response = HttpRequest.get("http://localhost:1080/get_books") .withConnectionProvider(s) .send(); assertEquals(200, response.statusCode()); assertTrue(response.body().contains("Tatum")); }
SSLSocket sslSocket = createSSLSocket( httpRequest.host(), httpRequest.port(), Socket socket = createSocket(httpRequest.host(), httpRequest.port(), httpRequest.connectionTimeout());
final boolean trustAll, final boolean verifyHttpsHost) throws IOException { SocketFactory socketFactory = getSocketFactory(proxy, true, trustAll); sslSocket = (SSLSocket) (getDefaultSSLSocketFactory(trustAll)).createSocket(socket, host, port, true);
private HttpRequest buildHttpRequest(String url, String requestStr, boolean useKey) throws WxPayException { HttpRequest request = HttpRequest .post(url) .timeout(this.getConfig().getHttpTimeout()) .connectionTimeout(this.getConfig().getHttpConnectionTimeout()) .bodyText(requestStr); if (useKey) { SSLContext sslContext = this.getConfig().getSslContext(); if (null == sslContext) { sslContext = this.getConfig().initSSLContext(); } final SSLSocketHttpConnectionProvider provider = new SSLSocketHttpConnectionProvider(sslContext); request.withConnectionProvider(provider); } if (StringUtils.isNotBlank(this.getConfig().getHttpProxyHost()) && this.getConfig().getHttpProxyPort() > 0) { ProxyInfo httpProxy = new ProxyInfo(ProxyType.HTTP, this.getConfig().getHttpProxyHost(), this.getConfig().getHttpProxyPort(), this.getConfig().getHttpProxyUsername(), this.getConfig().getHttpProxyPassword()); HttpConnectionProvider provider = request.connectionProvider(); if (null == provider) { provider = new SocketHttpConnectionProvider(); } provider.useProxy(httpProxy); request.withConnectionProvider(provider); } return request; }
/** * Creates a socket using socket factory. */ protected Socket createSocket(final String host, final int port, final int connectionTimeout) throws IOException { SocketFactory socketFactory = getSocketFactory(proxy, false, false); if (connectionTimeout < 0) { return socketFactory.createSocket(host, port); } else { // creates unconnected socket Socket socket = socketFactory.createSocket(); socket.connect(new InetSocketAddress(host, port), connectionTimeout); return socket; } }
/** * Returns socket factory based on proxy type and SSL requirements. */ protected SocketFactory getSocketFactory(final ProxyInfo proxy, final boolean ssl, final boolean trustAllCertificates) throws IOException { switch (proxy.getProxyType()) { case NONE: if (ssl) { return getDefaultSSLSocketFactory(trustAllCertificates); } else { return SocketFactory.getDefault(); } case HTTP: return new HTTPProxySocketFactory(proxy); case SOCKS4: return new Socks4ProxySocketFactory(proxy); case SOCKS5: return new Socks5ProxySocketFactory(proxy); default: return null; } } }
private HttpRequest buildHttpRequest(String url, String requestStr, boolean useKey) throws WxPayException { HttpRequest request = HttpRequest .post(url) .timeout(this.getConfig().getHttpTimeout()) .connectionTimeout(this.getConfig().getHttpConnectionTimeout()) .bodyText(requestStr); if (useKey) { SSLContext sslContext = this.getConfig().getSslContext(); if (null == sslContext) { sslContext = this.getConfig().initSSLContext(); } final SSLSocketHttpConnectionProvider provider = new SSLSocketHttpConnectionProvider(sslContext); request.withConnectionProvider(provider); } if (StringUtils.isNotBlank(this.getConfig().getHttpProxyHost()) && this.getConfig().getHttpProxyPort() > 0) { ProxyInfo httpProxy = new ProxyInfo(ProxyType.HTTP, this.getConfig().getHttpProxyHost(), this.getConfig().getHttpProxyPort(), this.getConfig().getHttpProxyUsername(), this.getConfig().getHttpProxyPassword()); HttpConnectionProvider provider = request.connectionProvider(); if (null == provider) { provider = new SocketHttpConnectionProvider(); } provider.useProxy(httpProxy); request.withConnectionProvider(provider); } return request; }
/** * Creates a socket using socket factory. */ protected Socket createSocket(final String host, final int port, final int connectionTimeout) throws IOException { SocketFactory socketFactory = getSocketFactory(proxy, false, false); if (connectionTimeout < 0) { return socketFactory.createSocket(host, port); } else { // creates unconnected socket Socket socket = socketFactory.createSocket(); socket.connect(new InetSocketAddress(host, port), connectionTimeout); return socket; } }
/** * Returns socket factory based on proxy type and SSL requirements. */ protected SocketFactory getSocketFactory(final ProxyInfo proxy, final boolean ssl, final boolean trustAllCertificates) throws IOException { switch (proxy.getProxyType()) { case NONE: if (ssl) { return getDefaultSSLSocketFactory(trustAllCertificates); } else { return SocketFactory.getDefault(); } case HTTP: return new HTTPProxySocketFactory(proxy); case SOCKS4: return new Socks4ProxySocketFactory(proxy); case SOCKS5: return new Socks5ProxySocketFactory(proxy); default: return null; } } }
@Test void testSocks5Proxy() { SocketHttpConnectionProvider s = new SocketHttpConnectionProvider(); s.useProxy(ProxyInfo.socks5Proxy("localhost", 1090, null, null)); HttpResponse response = HttpRequest.get("http://localhost:1080/get_books") .withConnectionProvider(s) .send(); assertEquals(200, response.statusCode()); assertTrue(response.body().contains("Tatum")); proxy.verify(request().withPath("/get_books"), exactly(1)); }
SSLSocket sslSocket = createSSLSocket( httpRequest.host(), httpRequest.port(), Socket socket = createSocket(httpRequest.host(), httpRequest.port(), httpRequest.connectionTimeout());
final boolean trustAll, final boolean verifyHttpsHost) throws IOException { SocketFactory socketFactory = getSocketFactory(proxy, true, trustAll); sslSocket = (SSLSocket) (getDefaultSSLSocketFactory(trustAll)).createSocket(socket, host, port, true);
@Test void testSocks5ProxyWithHttps() { SocketHttpConnectionProvider s = new SocketHttpConnectionProvider(); s.useProxy(ProxyInfo.socks5Proxy("localhost", 1090, null, null)); HttpResponse response = HttpRequest.get("https://localhost:1080/get_books") .withConnectionProvider(s) .trustAllCerts(true) .send(); assertEquals(200, response.statusCode()); assertTrue(response.body().contains("Tatum")); proxy.verify(request().withPath("/get_books"), exactly(1)); }
@Override public String getAccessToken(boolean forceRefresh) throws WxErrorException { Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); try { lock.lock(); if (this.getWxMpConfigStorage().isAccessTokenExpired() || forceRefresh) { String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); HttpRequest request = HttpRequest.get(url); if (this.getRequestHttpProxy() != null) { SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); provider.useProxy(getRequestHttpProxy()); request.withConnectionProvider(provider); } HttpResponse response = request.send(); String resultContent = response.bodyText(); WxError error = WxError.fromJson(resultContent, WxType.MP); if (error.getErrorCode() != 0) { throw new WxErrorException(error); } WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); } } finally { lock.unlock(); } return this.getWxMpConfigStorage().getAccessToken(); }
@Override public String getAccessToken(boolean forceRefresh) throws WxErrorException { Lock lock = this.getWxMpConfigStorage().getAccessTokenLock(); try { lock.lock(); if (this.getWxMpConfigStorage().isAccessTokenExpired() || forceRefresh) { String url = String.format(WxMpService.GET_ACCESS_TOKEN_URL, this.getWxMpConfigStorage().getAppId(), this.getWxMpConfigStorage().getSecret()); HttpRequest request = HttpRequest.get(url); if (this.getRequestHttpProxy() != null) { SocketHttpConnectionProvider provider = new SocketHttpConnectionProvider(); provider.useProxy(getRequestHttpProxy()); request.withConnectionProvider(provider); } HttpResponse response = request.send(); String resultContent = response.bodyText(); WxError error = WxError.fromJson(resultContent, WxType.MP); if (error.getErrorCode() != 0) { throw new WxErrorException(error); } WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); this.getWxMpConfigStorage().updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); } } finally { lock.unlock(); } return this.getWxMpConfigStorage().getAccessToken(); }