java - 使用 HttpURLConnection header 时出现 Android EOFException

标签 java android

我使用自定义授权 header 签署我的 http 请求:

String key="client="+USER+",hash="+sha1(STR, API_KEY)+",timestamp="+t.toString();

如果有人对 sha1 方法感兴趣:http://pastebin.com/HRFXQ4Bk key 字符串用作 header :

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/error(6855): java.io.EOFException 10-28 18:25:40.111: E/error(6855): at libcore.io.Streams.readAsciiLine(Streams.java:203) 10-28 18:25:40.111: E/error(6855): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:579) 10-28 18:25:40.111: E/error(6855): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:827) 10-28 18:25:40.111: E/error(6855): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283) 10-28 18:25:40.111: E/error(6855): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)

在我的服务器上,此请求没有记录任何访问。但是,当我删除 auth header 时,会根据服务器日志建立与我的服务器的连接。

那么 auth header 是如何影响请求的呢?为什么使用header没有连接?


顺便说一句,像这样的标题

conn.setRequestProperty("Authorization", "FOOBAR");

有效,但是由于授权 header 不符合要求而被拒绝:

10-29 08:12:07.235: E/error(23663): java.net.ConnectException: failed to connect to api.myserver.net (port 1337): connect failed: ECONNREFUSED (Connection refused) 10-29 08:12:07.235: E/error(23663): at libcore.io.IoBridge.connect(IoBridge.java:114) 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:459)

我的网络服务要求 header 具有以下格式

match(/client=([^,]*),hash=([^,]*),timestamp=([^,]*)/);

所以这个异常和最初的异常是不一样的。当我删除 header 并在我的网络服务上禁用授权时,连接按预期工作。所以问题似乎出在自定义授权 header 上。有什么想法吗?

最佳答案

根据此 question 看来这可能是某些 Android 版本的问题.

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

关于java - 使用 HttpURLConnection header 时出现 Android EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641374/

相关文章:

java - 如何从 keystore 生成 PrivateKey 和 PublicKey (.p12)

java - Android notificationDataSetChanged 未更新现有项目的 View ?

android - 为登录 Facebook 的 Android 应用程序编写测试

android - 如果文件已经下载,DownloadManager 不会下载文件

android - 应用程序崩溃了..找到了有关logcat的解释,但不知道为什么

java - 搜索数组列表的一部分 - java

java - 什么是java中的虚引用

java - 具有多个值的键可以通过两种方式访问​​JAVA

用于更改布局的 Java GUI 操作事件

java - 如何将文件从 Uri 复制到外部数据存储中的特定文件夹