【发布时间】:2016-08-23 07:22:19
【问题描述】:
我正在使用 https 从服务器获取一些数据。问题是当我尝试运行此代码时,它只会写入空字符串(response.toString() 返回空)。但是当我在BufferedReader 行之前添加Thread.sleep 方法时,它可以完美运行(从服务器返回完整数据)。这里的主要问题是什么?
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());
}
}
【问题讨论】:
-
你的服务器代码是什么?此客户端代码看起来非常好,所以请发布您的服务器代码,也许问题就在那里。也请将此代码更新为完整的方法,因为这只是一个 sn-p,并且可能包含在此代码的信封中。
-
@KrzysztofCichocki 我没有编写服务器代码。我从 Nessus 应用程序中获取一些 xml 数据。 (discussions.tenable.com/docs/DOC-1172)。当我发布我的登录参数时,Nessus 会返回一些会话令牌。这部分工作没有任何问题,但是当我尝试从 Nessus 获取一些 xml 信息时,如果没有 Thread.sleep,它就无法工作。
-
尝试删除“conn.setDoOutput(true);”行,如果没有效果,则尝试使用“conn.getOutputStream().flush();”而不是 "Thread.sleep() " ,也许这会对你有所帮助。