我正在发出 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/