Android OkHttp 库:GET 请求 - 异常 EOFException:\n 未找到:大小 = 0 内容 =

Posted

技术标签:

【中文标题】Android OkHttp 库:GET 请求 - 异常 EOFException:\\n 未找到:大小 = 0 内容 =【英文标题】:Android OkHttp library: GET Request - Exception EOFException: \n not found: size=0 content=Android OkHttp 库:GET 请求 - 异常 EOFException:\n 未找到:大小 = 0 内容 = 【发布时间】:2016-03-08 11:12:35 【问题描述】:

我在我的应用程序 OkHttp 库 (http://square.github.io/okhttp/) 中使用,在一个简单的 GET 请求中我得到了这个异常:

Caused by: java.io.EOFException: \n not found: size=0 content=...
   at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:201)
   at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:191)
   ...

unexpected end of stream on Connectionth.it-bedna.cz:80, proxy=DIRECT@ hostAddress=85.118.128.42 cipherSuite=none protocol=http/1.1 (recycle count=0)

对同一地址的其他 Get 请求工作正常。如果我将此请求键入 Chrome,它也可以正常工作。你知道哪里出了问题吗?

感谢您的建议。

编辑:GET 的代码

public Call doGetRequest(String url, Callback callback) 
    com.squareup.okhttp.Request request = new com.squareup.okhttp.Request.Builder()
            .url(url)
            .build();

    Call call = client.newCall(request);
    call.enqueue(callback);
    return call;

使用:

void getData()

    String url = "http://th.it-bedna.cz/api/v2/event/1/user?i=8";
    Singleton.getInstance().doGetRequest(url, new Callback() 
        @Override
        public void onFailure(Request request, IOException e) 
            Log.i("CDT", "onFailure: " + e);
        

        @Override
        public void onResponse(Response response) throws IOException 
        
    );

【问题讨论】:

您的模拟器是否配置了任何代理?因为我只有在启用代理时才会收到此错误,否则工作正常。 【参考方案1】:

如果您的服务器是th.it-bedna.cz,如您的 logcat 信息中所示,您可以尝试以下代码:

        OkHttpClient client = new OkHttpClient();
        // GET request
        Request request = new Request.Builder()
                .url("http://th.it-bedna.cz")
                .build();
        client.newCall(request).enqueue(new Callback() 
            @Override
            public void onFailure(Request request, IOException e) 
                Log.e(LOG_TAG, e.toString());
            
            @Override
            public void onResponse(Response response) throws IOException 
                Log.w(LOG_TAG, response.body().string());
                Log.i(LOG_TAG, response.toString());
            
        );

【讨论】:

我正在使用类似的代码,但它不起作用。网址是th.it-bedna.cz/api/v2/event/1/user?i=8 这个网址可以试试吗? 使用http://th.it-bedna.cz/api/v2/event/1/user,logcat 2-04 16:17:11.465 1544-1558/com.example.asyncokhttp W/OkHttp: "status":1 12-04 16:17:11.465 1544-1558/com.example.asyncokhttp I/OkHttp: Responseprotocol=http/1.1, code=200, message=OK, url=http://th.it-bedna.cz/api/v2/event/1/user 啊,我刚刚在我的 android 应用程序中使用 http://th.it-bedna.cz/api/v2/event/1/user?i=8 进行了测试,它适用于上面相同的 logcat 哦...这很奇怪。我将不得不更多地看看它。您有什么提示可以解决问题吗? 还没有,请发布更多导致该异常的代码。【参考方案2】:

OkHttpClientHttpURLConnection 也有同样的问题。 我的 android 模拟器被配置为使用代理,但我的代理不接受连接。

如果目标主机拒绝连接,是否使用代理无关紧要,您将获得该异常。

【讨论】:

以上是关于Android OkHttp 库:GET 请求 - 异常 EOFException:\n 未找到:大小 = 0 内容 =的主要内容,如果未能解决你的问题,请参考以下文章

Android常用开源库———————————OkHttp的使用方法

okhttputils Android 一个改善的okHttp封装库使用

Android网络请求库RetrofitUtils

android网络框架OkHttp之get请求(源码初识)

Android网络框架OkHttp之get请求(源码初识)

Android网络请求库【OkHttp4.9.3】基本用法与原理分析