在Java中创建GET请求总是返回SocketTimeoutException

在Java中创建GET请求总是返回SocketTimeoutException,java,jsoup,Java,Jsoup,每当我试图在下面看到的某个网站上执行GET请求时,我总是得到一个SocketTimeoutException。我只在Java中遇到这个问题,而如果我尝试使用Python的请求库,我会成功地获取文本 String link = "https://www.yeezysupply.com/api/products/FV6125/availability"; try { Connection connection = Jsoup.connect(link);

每当我试图在下面看到的某个网站上执行GET请求时,我总是得到一个SocketTimeoutException。我只在Java中遇到这个问题,而如果我尝试使用Python的请求库,我会成功地获取文本

String link = "https://www.yeezysupply.com/api/products/FV6125/availability";

        try {
            Connection connection = Jsoup.connect(link);
            connection.header("content-type", "application/json; charset=utf-8");

            Document document = connection.get();

            System.out.println(document.text());
        } catch (IOException e) {
            e.printStackTrace();
        }
以下是错误的屏幕截图:

我的主类的第64行是Document Document=connection.get

此外,当我使用Chrome扩展插件“PlugMan”时,我能够使用GET请求从站点成功获取主体,因此很明显,我在Java中的实现方式存在问题,因为它在其他地方也可以工作


谢谢。

编辑,该网站有防止机器人的应对措施。我得到它响应的唯一方法是使用用户代理。这是使用JSoup设置的方式:

Response resp=Jsoup.connectlink .userAgentUser代理:Mozilla/5.0 Macintosh;英特尔Mac OS X 10_15_3 AppleWebKit/605.1.15 KHTML,如Gecko版本/13.0.5 Safari/605.1.15 .followstree 处决 文档=resp.parse; 以下保留我的原始和错误假设,以供参考:

我不认为这是一个Java或编码问题。那个网站根本没有回应。网站是否已启动,或者您是否为Python配置了所需的代理,而Java代码中没有使用该代理?如果是这种情况,请看以下内容:

当我从我的工作站尝试一个简单的wget时,站点没有回答:

$ wget https://www.yeezysupply.com/api/products/FV6125/availability

--2020-03-29 17:59:13--  https://www.yeezysupply.com/api/products/FV6125/availability
Resolving www.yeezysupply.com (www.yeezysupply.com)... 184.28.114.123, 184.28.114.129
Connecting to www.yeezysupply.com (www.yeezysupply.com)|184.28.114.123|:443... connected.
HTTP request sent, awaiting response... Read error (Operation timed out) in headers.
Retrying.

编辑,网站有一个反措施,以防止机器人。我得到它响应的唯一方法是使用用户代理。这是使用JSoup设置的方式:

Response resp=Jsoup.connectlink .userAgentUser代理:Mozilla/5.0 Macintosh;英特尔Mac OS X 10_15_3 AppleWebKit/605.1.15 KHTML,如Gecko版本/13.0.5 Safari/605.1.15 .followstree 处决 文档=resp.parse; 以下保留我的原始和错误假设,以供参考:

我不认为这是一个Java或编码问题。那个网站根本没有回应。网站是否已启动,或者您是否为Python配置了所需的代理,而Java代码中没有使用该代理?如果是这种情况,请看以下内容:

当我从我的工作站尝试一个简单的wget时,站点没有回答:

$ wget https://www.yeezysupply.com/api/products/FV6125/availability

--2020-03-29 17:59:13--  https://www.yeezysupply.com/api/products/FV6125/availability
Resolving www.yeezysupply.com (www.yeezysupply.com)... 184.28.114.123, 184.28.114.129
Connecting to www.yeezysupply.com (www.yeezysupply.com)|184.28.114.123|:443... connected.
HTTP request sent, awaiting response... Read error (Operation timed out) in headers.
Retrying.
两点意见:

内容类型不是请求标头。它用于描述服务器响应内容。 要指示您期望的内容,应使用accept标头。 添加用户代理头是一个好习惯。有些服务器在没有用户代理的情况下不会响应,这里就是这样。 上面这两个使连接成为可能,但我不得不让你失望。不管您在accept头中设置了什么,响应都包含JSON,Jsoup不能解析JSON,只能解析HTML和XML。您必须使用其他库来下载和解析它

编辑: 使用Jsoup将JSON下载到字符串,而不是

connection.get();
使用:

两点意见:

内容类型不是请求标头。它用于描述服务器响应内容。 要指示您期望的内容,应使用accept标头。 添加用户代理头是一个好习惯。有些服务器在没有用户代理的情况下不会响应,这里就是这样。 上面这两个使连接成为可能,但我不得不让你失望。不管您在accept头中设置了什么,响应都包含JSON,Jsoup不能解析JSON,只能解析HTML和XML。您必须使用其他库来下载和解析它

编辑: 使用Jsoup将JSON下载到字符串,而不是

connection.get();
使用:


当访问该网站时,我确实收到了我要找的信息,该网站肯定是上了我的答案。在我看来,如果API需要一个用户代理或某种用户代理,那么API的预期使用者只能是一个UI页面,可能是它自己的UI。我想象这个服务最初是为了服务一些基于Javascript的UI而构建的,其思想是,如果有UI,那么就只有一个用户。很明显,这是很弱的酱汁,但这绝对是发生的事情。如果你只是卷曲这个URL,你会得到一个奇特的警告,告诉你你是一个机器人,所以你看不到:当访问该网站时,我确实收到了我要寻找的消息,该网站肯定是上了我投票了这个答案。在我看来,如果API需要一个用户代理或某种用户代理,那么API的预期使用者只能是一个UI页面,可能是它自己的UI。我想象这个服务最初是为了服务一些基于Javascript的UI而构建的,其思想是,如果有UI,那么就只有一个用户。很明显,这是很弱的酱汁,但这绝对是发生的事情。如果你只是卷曲这个URL,你会得到一个奇特的警告,告诉你你是一个机器人,所以你不会看到:我应该如何打开连接呢?我可以使用GSON解析JSON响应,但是如果Jsoup无法检索数据,那么我该怎么做呢?您更新的答案正好满足了我的需要,非常感谢!那么我该如何打开连接?我
可以使用GSON解析JSON响应,但是如果Jsoup无法检索数据,那么我该怎么做呢?您更新的答案正好满足了我的需要,非常感谢!