首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓EOFException在使用HttpURLConnection标头时

安卓EOFException在使用HttpURLConnection标头时
EN

Stack Overflow用户
提问于 2013-10-28 17:35:46
回答 4查看 8.5K关注 0票数 3

我用自定义授权头在我的http请求上签名:

代码语言:javascript
复制
String key="client="+USER+",hash="+sha1(STR, API_KEY)+",timestamp="+t.toString();

如果有人对sha1方法:http://pastebin.com/HRFXQ4Bk感兴趣,则键字符串用作报头:

代码语言:javascript
复制
URL url = new URL(sb.toString());

HttpURLConnection conn = null;  
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", key);
conn.setRequestMethod("GET");

InputStreamReader in = new InputStreamReader(conn.getInputStream());

当我试图得到响应时,我会得到以下错误:

10-28 18:25:40.111: e/错误(6855):libcore.io.Streams.readAsciiLine(Streams.java:203) 10-28 18:25:40.111: e/错误(6855):在libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:579) 10-28 18:40.111:e/错误(6855):at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:579) 10-28 18:40.111:e/错误(6855):atlibcore.net.http.HttpEngine.readResponse(HttpEngine.java:827) 10-28 18:25:40.111: E/错误(6855):在libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283) 10-28 18:25:40.111: e/错误(6855):在libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)

在我的服务器上,此请求没有记录访问权限。但是,当我删除auth头时,将根据服务器日志建立到我的服务器的连接。

那么,auth头是如何影响请求的呢?为什么在使用标头时没有连接?

顺便说一句,像

代码语言:javascript
复制
conn.setRequestProperty("Authorization", "FOOBAR");

但是,由于授权头与要求不匹配,因此拒绝工作:

10-29 08:12:07.235: E/error(23663):java.net.ConnectException:未能连接到api.myserver.net (端口1337):连接失败: ECONNREFUSED (连接被拒绝) 10-29 08:12:07.235: E/error(23663):at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 10-29 08:12:07.235: E/error(23663):at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 10-2908:12:07.235: E/error(23663):at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)

我的webservice要求报头具有以下格式

代码语言:javascript
复制
match(/client=([^,]*),hash=([^,]*),timestamp=([^,]*)/);

所以这个异常不同于最初的异常。当我删除标题并禁用对我的webservice的授权时,连接就像预期的那样工作。因此,问题似乎在于自定义授权头。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-28 19:05:53

根据这个question的说法,看起来这可能是安卓的某些版本的问题。

尝试将conn.setRequestProperty("Connection", "close")添加到请求中。

票数 8
EN

Stack Overflow用户

发布于 2015-01-30 09:19:38

首先,检查您的URL是否包含意外的换行符('\n‘或'\r\n'),如果包含,则在读取响应时将得到EOFException。新行将传输HTTP包,服务器认为客户端有更多的数据要发送,因此没有响应。每次尝试读取响应都会立即得到EOF。

确保您的请求是有效的,然后尝试其他人提供的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2014-10-09 17:13:11

当我将Android应用程序的后端从Asp改为PHP时,我开始看到这个问题。

我解决了它,在我的PHP页面中添加了以下一行:

代码语言:javascript
复制
header("Connection: close");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19641374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档