gpt4 book ai didi

java.net.SocketTimeoutException : Read timed out when querying url

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:48 28 4
gpt4 key购买 nike

我收到这个错误:

java.net.SocketTimeoutException: Read timed out
http://api.trove.nla.gov.au/result?key=<KEY HERE>&zone=all&reclevel=brief&q=%20am%20only%20yours%20fear&encoding=json
Exception in thread "main" java.lang.NullPointerException at
trove.connect.TroveService.QueryTrove(TroveService.java:134) at
datasetconverter.CsvReader2.main(CsvReader2.java:64) Java Result: 1
BUILD SUCCESSFUL (total time: 1 minute 41 seconds)

当我执行我的代码时:

   public String getJSON(String url, int timeout) throws IOException, Exception {
try {
URL u = new URL(url);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setRequestProperty("Content-length", "0");
c.setUseCaches(false);
c.setAllowUserInteraction(false);
c.setConnectTimeout(timeout);
c.setReadTimeout(timeout);
c.connect();
int status = c.getResponseCode();

switch (status) {
case 504:
case 503:
Thread.sleep(10000);
this.QueryTrove(url);
break;
case 200:
case 201:
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
return sb.toString();
}

} catch (MalformedURLException ex) {
System.out.println(ex);
System.out.println(url);
} catch (IOException ex) {
System.out.println(ex);
System.out.println(url);
}
return null;
}


public int QueryTrove(String query) throws Exception{
int sum =0;
String json = getJSON("http://api.trove.nla.gov.au/result?key=<KEY HERE>&zone=all&reclevel=brief&q="+query+"&encoding=json",10000);

Gson gson = new Gson();

JsonResponse r = gson.fromJson(json, JsonResponse.class);
for (Zone zone : r.getResponse().getZones()) {
sum = sum + Integer.parseInt(zone.records.getTotal());
}

return sum;
}

这是因为 setConnectionTimeout 吗?如何解决?

最佳答案

发生读取超时是因为服务器响应“读取超时”参数的时间更长。但是假设你有一个合理的读取超时值(比如 30 秒),这并不一定意味着问题是你的读取超时太短,它可能是服务器卡住了并且永远不会返回回答。

要进行诊断,您可以执行以下几项操作:

  • 首先尝试通过浏览器访问时,看看需要多长时间才能获得完整响应。
  • 尝试摆脱超时(默认为无超时)并查看您是否收到响应。

如果服务器响应您的浏览器而不是您的 java 应用程序,那么请首先确保您调用的是完全相同的 URL。除此之外,由于您的 USER-AGENT,服务器可能会忽略您,请尝试模拟真实的浏览器。

也只是一个友好的建议,我会将超时作为参数传递,只需定义一个合理的超时并直接使用它,除非它是一个非常不寻常的用例,没有人愿意在使用这种抽象时传递超时.

关于java.net.SocketTimeoutException : Read timed out when querying url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13698385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com