![](/img/trans.png)
[英]Why do I get EOF exception while reading a datainputstream in java?
[英]HttpsUrlConnection getting EOF exception while GET request
我通過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());
}
}
好吧,你的代碼對我有用;-)甚至沒有Thread.sleep - 見下文 - 我從“Oracle”中提取數據。 另外請不要忘記關閉輸入流。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL url = new URL("https://www.oracle.com");
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());
}
}
}
HttpsUrlConnection
在GET請求時獲取EOF異常
你沒有做GET請求。 您正在進行POST,但您沒有提供任何POST數據。
這里還有很多其他問題:
conn.setRequestMethod("GET");
這是默認值。 不要寫無意義的代碼。
conn.setDoOutput(true);
這會將請求方法更改為POST。 如果您不想執行POST,請刪除此行。
conn.setDoInput(true);
這是默認值。 不要寫無意義的代碼。
if (conn != null) {
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);
}
在這里,您嘗試從POST中讀取響應,而無需編寫任何POST數據。 服務器可能會成為對象,可能是通過提前終止連接,這可能導致EOFException
,但不會出現在上面的readLine()
代碼中。 由於您沒有提供堆棧跟蹤,因此無法進一步發表評論。 但是,除非存在服務器端問題,否則在修復上述錯誤后,您的代碼應該可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.