我從https服務器獲取一些數據。問題是當我嘗試運行這段代碼時,它只是寫空字符串(response.toString()
返回空)。但是,在BufferedReader
行之前添加Thread.sleep
方法的時候,它只是完美的(從服務器返回完整的數據)。這裏的主要問題是什麼?HttpsUrlConnection在獲取請求時獲取EOF異常
private static void httpGet(String urlStr, String[] paramName, String[] paramVal) throws Exception {
URL url = new URL(urlStr);
HttpsURLConnection conn
= (HttpsURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setAllowUserInteraction(false);
conn.setRequestProperty(COOKIE_HEADER, param);
if (conn != null) {
//Thread.sleep(1000);
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
System.out.println(response.toString());
}
}
什麼是您的服務器代碼?這個客戶端代碼看起來非常好,所以請發佈你的服務器代碼,也許問題就在那裏。請將此代碼更新爲完整的方法,因爲這只是一小段代碼,並且可能包含在此代碼的信封中。 –
@KrzysztofCichocki我沒有寫服務器代碼。我從Nessus應用程序獲取一些xml數據。 (https://discussions.tenable.com/docs/DOC-1172)。當我發佈我的登錄參數時,Nessus會返回一些會話令牌。這部分工作沒有任何問題,但是當我嘗試從Nessus獲得一些xml信息時,它只是沒有Thread.sleep沒有工作。 – hellzone
嘗試刪除行「conn.setDoOutput(true);」如果這將不起作用,然後嘗試使用「conn.getOutputStream()。flush();」而不是「Thread.sleep()」,也許這會幫助你。 –