2016-12-27 47 views
0

当我使用curl查询logz.io作品的魅力:handshake_failure

curl -XPOST 'https://api.logz.io/v1/query' --header "X-USER-TOKEN : VALID_TOKEN" --header "Content-Type: application/json" -d '{"queryString" : "query","timestamp" : {"gte":1482157546000}}' 

然而,当我尝试用JAVA 8执行相同的,

java version "1.8.0_101" 
Java(TM) SE Runtime Environment (build 1.8.0_101-b13) 
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode) 
从我的Grails 2.5

0.4应用:

String baseUrl = "https://api.logz.io/v1/" 
String query = "query" 
String apiKey = "VALID_TOKEN" 

withHttp(uri: baseUrl) { 
    def bodyContent = [ 
     queryString: query 
    ] 
    def json = post(path: 'query', body: bodyContent) { 
     headers.'X-USER-TOKEN' = apiKey 
    } 
    return json 
} 

我有:

| Error 2016-12-26 18:41:06,144 [http-bio-8080-exec-9] ERROR errors.GrailsExceptionResolver - SSLHandshakeException occurred when processing request: [GET] /cms/offer/findWhoEditedAllocationItems/14787265 
Received fatal alert: handshake_failure. Stacktrace follows: 
Message: Received fatal alert: handshake_failure 
    Line | Method 
->> 192 | getSSLException     in sun.security.ssl.Alerts 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 154 | getSSLException     in  '' 
| 2023 | recvAlert . . . . . . . . . . . in sun.security.ssl.SSLSocketImpl 
| 1125 | readRecord      in  '' 
| 1375 | performInitialHandshake . . . . in  '' 
| 1403 | startHandshake     in  '' 
| 1387 | startHandshake . . . . . . . . in  '' 
| 553 | connectSocket     in org.apache.http.conn.ssl.SSLSocketFactory 
| 412 | connectSocket . . . . . . . . . in  '' 
| 179 | openConnection     in org.apache.http.impl.conn.DefaultClientConnectionOperator 
| 328 | open . . . . . . . . . . . . . in org.apache.http.impl.conn.ManagedClientConnectionImpl 
| 612 | tryConnect      in org.apache.http.impl.client.DefaultRequestDirector 
| 447 | execute . . . . . . . . . . . . in  '' 
| 884 | doExecute      in org.apache.http.impl.client.AbstractHttpClient 
|  82 | execute . . . . . . . . . . . . in org.apache.http.impl.client.CloseableHttpClient 
|  55 | execute       in  '' 
| 477 | doRequest . . . . . . . . . . . in groovyx.net.http.HTTPBuilder 
| 359 | post       in  '' 
|  -2 | invoke0 . . . . . . . . . . . . in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke       in  '' 
|  43 | invoke . . . . . . . . . . . . in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke       in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke . . . . . . . . in org.springsource.loaded.ri.ReflectiveInterceptor 
|  93 | invoke       in org.codehaus.groovy.reflection.CachedMethod 
| 325 | doMethodInvoke . . . . . . . . in groovy.lang.MetaMethod 
| 1210 | invokeMethod     in groovy.lang.MetaClassImpl 
| 1123 | invokeMethod . . . . . . . . . in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod     in groovy.lang.MetaClassImpl 
| 1122 | invokeMethod . . . . . . . . . in  '' 
| 1123 | invokeMethod     in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod . . . . . . . . . in groovy.lang.MetaClassImpl 
|  69 | callCurrent      in org.codehaus.groovy.runtime.callsite.PogoMetaClassSite 
|  52 | defaultCallCurrent . . . . . . in org.codehaus.groovy.runtime.callsite.CallSiteArray 
| 154 | callCurrent      in org.codehaus.groovy.runtime.callsite.AbstractCallSite 
| 174 | callCurrent . . . . . . . . . . in  '' 
|  24 | doCall       in com.example.logz.LogzService$__tt__getResultFromQuery_closure3 
|  -1 | doCall . . . . . . . . . . . . in  '' 
|  -2 | invoke0       in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke . . . . . . . . . . . . in  '' 
|  43 | invoke       in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke . . . . . . . . . . . . in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke     in org.springsource.loaded.ri.ReflectiveInterceptor 
| 210 | invoke . . . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSiteNoUnwrapNoCoerce 
|  71 | call       in org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite 
|  48 | defaultCall . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.CallSiteArray 
| 113 | call       in org.codehaus.groovy.runtime.callsite.AbstractCallSite 
| 117 | call . . . . . . . . . . . . . in  '' 
|  93 | doCall       in RestGrailsPlugin$_closure4 
|  -2 | invoke0 . . . . . . . . . . . . in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke       in  '' 
|  43 | invoke . . . . . . . . . . . . in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke       in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke . . . . . . . . in org.springsource.loaded.ri.ReflectiveInterceptor 
|  93 | invoke       in org.codehaus.groovy.reflection.CachedMethod 
| 325 | doMethodInvoke . . . . . . . . in groovy.lang.MetaMethod 
| 1210 | invokeMethod     in groovy.lang.MetaClassImpl 
| 1123 | invokeMethod . . . . . . . . . in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod     in groovy.lang.MetaClassImpl 
| 1084 | invokeMethod . . . . . . . . . in  '' 
| 1123 | invokeMethod     in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod . . . . . . . . . in groovy.lang.MetaClassImpl 
| 917 | invokePogoMethod    in org.codehaus.groovy.runtime.InvokerHelper 
| 900 | invokeMethod . . . . . . . . . in  '' 
| 189 | invoke       in org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod$AnonymousMetaMethod 
| 251 | invoke . . . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoMetaMethodSiteNoUnwrapNoCoerce 
|  59 | callCurrent      in org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite 
|  52 | defaultCallCurrent . . . . . . in org.codehaus.groovy.runtime.callsite.CallSiteArray 
| 154 | callCurrent      in org.codehaus.groovy.runtime.callsite.AbstractCallSite 
| 174 | callCurrent . . . . . . . . . . in  '' 
|  20 | $tt__getResultFromQuery   in com.example.logz.LogzService 
|  -1 | doCall . . . . . . . . . . . . in com.example.logz.LogzService$_getResultFromQuery_closure1 
|  -2 | invoke0       in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke . . . . . . . . . . . . in  '' 
|  43 | invoke       in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke . . . . . . . . . . . . in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke     in org.springsource.loaded.ri.ReflectiveInterceptor 
|  93 | invoke . . . . . . . . . . . . in org.codehaus.groovy.reflection.CachedMethod 
| 325 | doMethodInvoke     in groovy.lang.MetaMethod 
| 1210 | invokeMethod . . . . . . . . . in groovy.lang.MetaClassImpl 
| 1123 | invokeMethod     in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod . . . . . . . . . in groovy.lang.MetaClassImpl 
| 426 | call       in groovy.lang.Closure 
|  -1 | call . . . . . . . . . . . . . in com.example.logz.LogzService$_getResultFromQuery_closure1 
| 442 | call       in groovy.lang.Closure 
|  -1 | call . . . . . . . . . . . . . in com.example.logz.LogzService$_getResultFromQuery_closure1 
|  90 | doInTransaction     in org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate$2 
| 133 | execute . . . . . . . . . . . . in org.springframework.transaction.support.TransactionTemplate 
|  87 | execute       in org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate 
|  -1 | getResultFromQuery . . . . . . in com.example.logz.LogzService 
|  -2 | invoke0       in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke . . . . . . . . . . . . in  '' 
|  43 | invoke       in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke . . . . . . . . . . . . in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke     in org.springsource.loaded.ri.ReflectiveInterceptor 
|  93 | invoke . . . . . . . . . . . . in org.codehaus.groovy.reflection.CachedMethod 
| 325 | doMethodInvoke     in groovy.lang.MetaMethod 
|  -1 | call . . . . . . . . . . . . . in groovy.lang.MetaMethod$doMethodInvoke$0 
|  48 | defaultCall      in org.codehaus.groovy.runtime.callsite.CallSiteArray 
|  -1 | call . . . . . . . . . . . . . in groovy.lang.MetaMethod$doMethodInvoke$0 
| 184 | doCall       in GrailsMelodyGrailsPlugin$_closure4$_closure16$_closure17 
|  -1 | invoke . . . . . . . . . . . . in sun.reflect.GeneratedMethodAccessor399 
|  43 | invoke       in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke . . . . . . . . . . . . in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke     in org.springsource.loaded.ri.ReflectiveInterceptor 
|  93 | invoke . . . . . . . . . . . . in org.codehaus.groovy.reflection.CachedMethod 
|  84 | invoke       in org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod 
| 1121 | invokeMethod . . . . . . . . . in groovy.lang.ExpandoMetaClass 
| 1019 | invokeMethod     in groovy.lang.MetaClassImpl 
|  42 | call . . . . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.PogoMetaClassSite 
|  48 | defaultCall      in org.codehaus.groovy.runtime.callsite.CallSiteArray 
| 113 | call . . . . . . . . . . . . . in org.codehaus.groovy.runtime.callsite.AbstractCallSite 
| 125 | call       in  '' 
| 161 | findWhoEditedAllocationItems . in com.example.sale.OfferController 
|  -2 | invoke0       in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke . . . . . . . . . . . . in  '' 
|  43 | invoke       in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke . . . . . . . . . . . . in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke     in org.springsource.loaded.ri.ReflectiveInterceptor 
| 154 | invoke . . . . . . . . . . . . in org.codehaus.groovy.grails.web.servlet.mvc.MixedGrailsControllerHelper 
| 375 | handleAction     in org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerHelper 
| 252 | executeAction . . . . . . . . . in  '' 
| 205 | handleURI      in  '' 
| 126 | handleURI . . . . . . . . . . . in  '' 
|  72 | handleRequest     in org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController 
|  50 | handle . . . . . . . . . . . . in org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter 
| 347 | doDispatch      in org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet 
| 893 | doService . . . . . . . . . . . in org.springframework.web.servlet.DispatcherServlet 
| 967 | processRequest     in org.springframework.web.servlet.FrameworkServlet 
| 858 | doGet . . . . . . . . . . . . . in  '' 
| 620 | service       in javax.servlet.http.HttpServlet 
| 843 | service . . . . . . . . . . . . in org.springframework.web.servlet.FrameworkServlet 
| 727 | service       in javax.servlet.http.HttpServlet 
| 303 | internalDoFilter . . . . . . . in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter      in  '' 
|  52 | doFilter . . . . . . . . . . . in org.apache.tomcat.websocket.server.WsFilter 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
| 101 | doFilter      in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter . . . . . . . in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter      in  '' 
| 101 | doFilter . . . . . . . . . . . in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
| 101 | doFilter      in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter . . . . . . . in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter      in  '' 
| 748 | invoke . . . . . . . . . . . . in org.apache.catalina.core.ApplicationDispatcher 
| 486 | processRequest     in  '' 
| 411 | doForward . . . . . . . . . . . in  '' 
| 338 | forward       in  '' 
|  -2 | invoke0 . . . . . . . . . . . . in sun.reflect.NativeMethodAccessorImpl 
|  62 | invoke       in  '' 
|  43 | invoke . . . . . . . . . . . . in sun.reflect.DelegatingMethodAccessorImpl 
| 498 | invoke       in java.lang.reflect.Method 
| 1426 | jlrMethodInvoke . . . . . . . . in org.springsource.loaded.ri.ReflectiveInterceptor 
| 150 | invoke       in net.bull.javamelody.JspWrapper 
| 285 | invoke . . . . . . . . . . . . in net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler 
|  -1 | forward       in com.sun.proxy.$Proxy49 
| 178 | forwardRequestForUrlMappingInfo in org.codehaus.groovy.grails.web.mapping.UrlMappingUtils 
| 144 | forwardRequestForUrlMappingInfo in  '' 
| 135 | forwardRequestForUrlMappingInfo in  '' 
| 216 | doFilterInternal    in org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter 
| 107 | doFilter . . . . . . . . . . . in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
| 198 | doFilter      in net.bull.javamelody.MonitoringFilter 
| 176 | doFilter . . . . . . . . . . . in  '' 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
|  69 | doFilterInternal    in org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter 
| 107 | doFilter . . . . . . . . . . . in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
|  67 | doFilterInternal    in org.codehaus.groovy.grails.web.filters.HiddenHttpMethodFilter 
| 107 | doFilter . . . . . . . . . . . in org.springframework.web.filter.OncePerRequestFilter 
| 241 | internalDoFilter    in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter . . . . . . . . . . . in  '' 
| 449 | executeChain     in org.apache.shiro.web.servlet.AbstractShiroFilter 
| 365 | call . . . . . . . . . . . . . in org.apache.shiro.web.servlet.AbstractShiroFilter$1 
|  90 | doCall       in org.apache.shiro.subject.support.SubjectCallable 
|  83 | call . . . . . . . . . . . . . in  '' 
| 383 | execute       in org.apache.shiro.subject.support.DelegatingSubject 
| 362 | doFilterInternal . . . . . . . in org.apache.shiro.web.servlet.AbstractShiroFilter 
| 125 | doFilter      in org.apache.shiro.web.servlet.OncePerRequestFilter 
| 344 | invokeDelegate . . . . . . . . in org.springframework.web.filter.DelegatingFilterProxy 
| 261 | doFilter      in  '' 
| 241 | internalDoFilter . . . . . . . in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter      in  '' 
|  85 | doFilterInternal . . . . . . . in org.springframework.web.filter.CharacterEncodingFilter 
| 107 | doFilter      in org.springframework.web.filter.OncePerRequestFilter 
| 344 | invokeDelegate . . . . . . . . in org.springframework.web.filter.DelegatingFilterProxy 
| 261 | doFilter      in  '' 
| 241 | internalDoFilter . . . . . . . in org.apache.catalina.core.ApplicationFilterChain 
| 208 | doFilter      in  '' 
| 220 | invoke . . . . . . . . . . . . in org.apache.catalina.core.StandardWrapperValve 
| 122 | invoke       in org.apache.catalina.core.StandardContextValve 
| 171 | invoke . . . . . . . . . . . . in org.apache.catalina.core.StandardHostValve 
| 103 | invoke       in org.apache.catalina.valves.ErrorReportValve 
| 116 | invoke . . . . . . . . . . . . in org.apache.catalina.core.StandardEngineValve 
| 408 | service       in org.apache.catalina.connector.CoyoteAdapter 
| 1070 | process . . . . . . . . . . . . in org.apache.coyote.http11.AbstractHttp11Processor 
| 611 | process       in org.apache.coyote.AbstractProtocol$AbstractConnectionHandler 
| 316 | run . . . . . . . . . . . . . . in org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor 
| 1142 | runWorker      in java.util.concurrent.ThreadPoolExecutor 
| 617 | run . . . . . . . . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker 
|  61 | run        in org.apache.tomcat.util.threads.TaskThread$WrappingRunnable 
^ 745 | run . . . . . . . . . . . . . . in java.lang.Thread 

我想也加入标志:-Ddeployment.security.TLSv1.2=true启动应用程序时,但它仍然返回相同的错误。 api.logz.io服务器的

统计看起来不错:https://www.ssllabs.com/ssltest/analyze.html?d=api.logz.io

我怎么可以使用这个API?

+0

经过进一步调查,我怀疑这个问题可能与SNI连接,因为我们正在使用的用于休息通信的lib取决于旧的apache httpclient。更多信息:https://github.com/jgritman/httpbuilder/issues/21和https://en.wikipedia.org/wiki/Server_Name_Indication –

+1

可能叉接班人:https://github.com/http-builder-ng/HTTP建设者-NG https://github.com/gregorydickson/httpbuilder https://github.com/noamt/rest-gradle-plugin https://github.com/budjb/http-requests –

+0

https://开头github.com/http-builder-ng/http-builder-ng应该能够处理这个问题,如果不是随意创建问题,我们可以解决它。 – cjstehno

回答

2

如支持渠道回答,下面的Java 8代码工作:

import javax.net.ssl.HttpsURLConnection; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 

public class Main { 
    public static void main(String[] args) throws IOException { 

     String token = "XXX"; 
     String url = "https://api.logz.io/v1/query"; 

     String query = "{ \"queryString\": \"*\" }"; 

     URL myurl = new URL(url); 
     HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
     con.setRequestMethod("POST"); 

     con.setRequestProperty("Content-length", String.valueOf(query.length())); 
     con.setRequestProperty("Content-Type","application/json"); 
     con.setRequestProperty("X-USER-TOKEN",token); 
     con.setDoOutput(true); 
     con.setDoInput(true); 

     DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
     output.writeBytes(query); 
     output.close(); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 

     reader.lines().forEach(sb::append); 

     System.out.println(sb.toString()); 
    } 
} 

所以,我认为这个问题是某处使用Grails,而不是Java的8

+0

是真的,谢谢你的提示,但我仍然在寻找一种解决方法。 –

+2

很酷。更新,当你弄明白了:) –