我正在 Spring Boot 上开发一个应用程序,但是出于安全目的,我需要在各种表单上集成 recaptcha,但是连接总是导致连接超时,我使用 postman 验证了 api 和 url,它通过了并且返回一个答案,但是在 Java 代码时间耗尽时,我收到错误 java.net.ConnectException: Connection timed out: connect
我不知道我做错了什么我使用 postman 代码提供“Java OK HTTP”。代码是下一个。
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();
但是我似乎不知道错误出在哪里,有人可以帮助我吗?
最佳答案
您遇到连接超时
错误,因此我们可以说:
- 由于这不是
未知主机
错误,因此您必须有一个可以为 www.google.com 提供 IPv4 或 IPv6 地址的 DNS - 由于这不是
目标无法到达
错误,因此您有一条到网关的路由,并且该网关是具有默认路由的本地路由器。
因此,connect
超时意味着您已向目的地发送了一个 TCP SYN 数据包,并且该数据包已在您的本地网络中的某个位置或在您的网络与 Internet 之间的接口(interface)处被丢弃, 在防火墙中(因为您没有收到任何表示出现问题的 ICMP/ICMPv6 数据包 - 标准路由器应该向您发送此类信息)。
问题出在第一个数据包 (TCP SYN) 上,因此您的问题与源代码中的 addHeader()
调用无关。在您的情况下,这些 header 永远不会发送并出现此错误。
由于 www.google.fr 有 IPv4 和 IPv6 地址,因此有两种可能性:
- 您有一个发送 RA 通告的本地 IPv6 路由器,但未通过 IPv6 连接到 Internet。 试试这个来检查这个案例:
替换:
https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX
作者:
https://[2a00:1450:400c:c04::6a]/recaptcha/api/siteverify?secret=XX&response=XXX
如果您继续出现超时
,则表示您的 IPv6 路由器配置不正确。
- 或者您有防火墙并需要使用代理
替换:
https://www.google.com/recaptcha/api/siteverify?secret=XX&response=XXX
作者:
https://74.125.206.104/recaptcha/api/siteverify?secret=XX&response=XXX
如果您继续超时,则意味着您有防火墙并且应该使用代理。
关于java - Spring Boot 验证码配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040726/