2017-09-04 149 views
0

我正在開發一個應用程序在春季啓動,但是我需要爲各種形式的安全目的整合recaptcha,但是連接總是導致連接超時,我驗證了api和郵遞員的url以及它通過並返回一個答案,但是在Java代碼時間用完了,我得到了錯誤java.net.ConnectException: Connection timed out: connect我不知道我在做什麼錯我使用「Java OK HTTP」提供的郵遞員代碼。代碼是下一個。Spring Boot Recaptcha Configuration

OkHttpClient client = new OkHttpClient(); 

Request request = new Request.Builder() 
.url("https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX") 
.get() 
.addHeader("cache-control", "no-cache") 
.addHeader("postman-token", "f47548e1-a9e0-9065-7f76-dced294bddcb") 
.build(); 

Response response = client.newCall(request).execute(); 

但是,我似乎並沒有得到錯誤的地方,有人可以幫我嗎?

回答

1

你有Connection timed out錯誤,所以我們可以說:

  • ,因爲這不是一個Unknown host錯誤,你必須有一個DNS,讓IPv4或IPv6地址www.google.com
  • 因爲這不是destination unreachable錯誤,所以您有一個到網關的路由,並且此網關是具有默認路由的本地路由器。

因此,connect超時意味着您發送一個TCP SYN包到目的地,該分組已經在你的本地網絡或在防火牆您的網絡和互聯網,之間的界面某處下降(因爲你還沒有收到任何ICMP/ICMPv6數據包,說明有什麼問題 - 標準路由器應該向你發送這樣的信息)。

問題是與第一個數據包(TCP SYN),所以你的問題不能相對於你的源代碼中的addHeader()調用。在你的情況下,這些標題永遠不會被髮送,出現這個錯誤。

由於www.google.fr具有IPv4和IPv6地址,有兩種可能性:

  • 或者你在發送RA advertisments,但沒有連接到互聯網IPv6的本地IPv6路由器。 試試這個檢查這種情況:

取代:

https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX 

由:

https://[2a00:1450:400c:c04::6a]/recaptcha/api/siteverify?secret=XX&response=XXX 

如果繼續得到timeout,這意味着你有一個IPv6路由器是嚴重配置。

  • 或者你有一個防火牆,需要使用代理

取代:

https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX 

由:

https://74.125.206.104/recaptcha/api/siteverify?secret=XX&response=XXX 

如果繼續得到一個超時,這意味着你有防火牆並且應該使用代理。

+0

其實我得到了最後一次conf的超時,但我得到了第一個無法訪問,怎麼可能使用代理? – Zenoheld

+0

由於您的上次conf有超時且第一次無法訪問,您是對的:您需要使用代理。您當然必須使用代理進行身份驗證(最常見的情況)。所以,閱讀:https://stackoverflow.com/questions/35554380/okhttpclient-proxy-authentication-how-to –

+1

最後它沒有工作,但在我的另一臺機器上工作,代理是一個痛苦屁股,問題是一個配置需要,因爲我在一臺虛擬機內工作,非常感謝你。 – Zenoheld