2017-09-04 150 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