java - URLConnection 有时返回空字符串响应?

标签 java

我正在发出 http GET 请求。在我大约 70% 的尝试中它是有效的。由于某种原因,我有时无法从成功的连接中得到任何响应字符串。我只是在我的应用程序中设置了一个按钮,它会不断触发下面的代码。一个调用可能无法回复字符串,下一个调用可以正常工作:

private onButtonClick() {
    try {
        doit();
    } catch (Exception ex) {
        ...
    }
}   

public void doit() throws Exception {
    URL url = new URL("http://www.example.com/service");

    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setDoInput(true);
    connection.setUseCaches(false); 
    connection.setAllowUserInteraction(false); 
    connection.setReadTimeout(30 * 1000);
    connection.setRequestProperty("Connection", "Keep-Alive"); 
    connection.setRequestProperty("Authorization", 
        "Basic " +  Base64.encode("username" + ":" + "password"));

    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    String line = "";
    StringBuilder sb = new StringBuilder();
    while ((line = in.readLine()) != null) {
        sb.append(line);
    }
    in.close();

    connection.disconnect();

    // Every so often this prints an empty string!
    System.out.println(sb.toString());
}

我在这里做错了什么吗?看来我可能没有从上次调用中正确关闭连接,并且响应被破坏或其他什么?我还同时从多个线程调用 doit() ,但我认为该方法的内容是线程安全的,但行为相同,

谢谢

谢谢

最佳答案

这个方法看起来不错。它是可重入的,因此调用不应互相干扰。这可能是服务器问题,要么是故意限制,要么只是一个错误。

编辑:您可以使用 getResponseCode 检查状态代码.

关于java - URLConnection 有时返回空字符串响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930354/

相关文章:

java - 如何从 vaadin 的 'com.vaadin.DefaultWidgetSet' 错误中恢复

java - 寻找 FTP 服务器 Java 库

java - Java中的 token 解析

java - 使用 Spark Streaming 找不到 Cassandra 类

java - 在 Java 中移动对象时遇到问题

java - 数组列表中丢失数据

java - 是否可以在 Camel 中轮询而不消耗消息?

java - 定义切入点以捕获接口(interface)但不捕获父接口(interface)或子接口(interface)

java - struts2拦截器堆栈

java - 终止 Java 线程