我正在发出一个http GET请求。它在我尝试中的约70%中起作用。出于某种原因,我有时从成功的连接中得不到响应字符串。我只是在我的应用程序中设置了一个按钮,它不断激活下面的代码。一个电话可能无法回复字符串,下一个电话工作正常:URLConnection有时会返回空字符串响应?
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,但我认为该法的内容是线程安全的,同样的行为虽然
感谢
感谢
检查来自服务器的HTTP状态(一般为200,如果好)。 – seand 2010-10-14 06:00:58
如何使用上述设置从服务器检查状态码,但URLConnection是否允许您这样做? – user291701 2010-10-14 06:13:45
确定读取了响应代码,当响应为空时,代码为-1!在尝试工作时,它会按预期返回200。 – user291701 2010-10-14 06:23:37