我有一个问题,当我尝试读取任何输入时,我的HttpsURLConnection将抛出一个EOFException.该代码适用于某些网络调用,但在其他网络调用上失败.如果我尝试从连接中读取任何内容,则会因上述错误而失败.
例:
urlConnect.getResponseCode() // will throw error
urlConnect.getResponseMessage() // will throw error
BufferedInputStream in = new BufferedInputStream(urlConnect.getInputStream()); //will throw error
Run Code Online (Sandbox Code Playgroud)
以下是每个的堆栈跟踪:
GETRESPONSE:
03-14 09:49:18.547: W/System.err(6270): java.io.EOFException
03-14 09:49:18.547: W/System.err(6270): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)
Run Code Online (Sandbox Code Playgroud)
的BufferedInputStream:
03-14 09:39:14.077: W/System.err(5935): java.io.EOFException
03-14 09:39:14.077: W/System.err(5935): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:39:14.077: W/System.err(5935): at …Run Code Online (Sandbox Code Playgroud) 这个小代码片段可以在Mac的JVM上正常运行.不幸的是,它在Android 4.2上执行时崩溃了.
import java.net.HttpURLConnection;
import java.net.URL;
public class App
{
public static void main( String... arguments ) throws Exception
{
HttpURLConnection connection = (HttpURLConnection) new URL( "https://github.com" ).openConnection();
connection.setRequestMethod( "HEAD" );
System.out.println( connection.getResponseCode() + "" );
}
}
Run Code Online (Sandbox Code Playgroud)
如果我更换https://github.com与https://www.facebook.com它工作正常,但我无法找出原因.
该例外不包含消息; 所以这里至少是堆栈跟踪.
java.io.EOFException
at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)
Run Code Online (Sandbox Code Playgroud) 这是最简单的问题.
我使用HttpUrlConnection对象通过代理创建到我的服务器的HTTPS连接.
我的代理关闭连接但我的代码仍尝试重用相同的连接.所以我得到了EOFException.
我该如何处理这类案件?
我面临一条错误消息
java.io.EOFException
at libcore.io.Streams.readAsciiLine(Streams.java:203)
at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:579)
at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:827)
at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
com.example.rest.MainActivity.excutePost(MainActivity.java:354)
at com.example.rest.MainActivity$1.run(MainActivity.java:86)
at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)
我的代码是
URL url = new URL(url);
con = (HttpsURLConnection) url.openConnection();
con.setRequestProperty("Content-Language", "en-US,en;q=0.8");
con.setRequestProperty("userID", "user20@yahoo.com");
con.setRequestProperty("password", "xyz123");
con.setRequestMethod(HttpDelete.METHOD_NAME);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "*/*");
con.addRequestProperty("Accept-Encoding", "gzip");
InputStream inputStream = con.getInputStream();
String convertInputStreamToString = convertInputStreamToString(inputStream);
Run Code Online (Sandbox Code Playgroud)
我试过这些链接
android ×4
eofexception ×2
http ×1
httpclient ×1
inputstream ×1
java ×1
rest ×1
web-services ×1