我正在發出一個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