我使用自定义授权标头签署我的 http 请求:
String key="client="+USER+",hash="+sha1(STR, API_KEY)+",timestamp="+t.toString();
如果有人对 sha1 方法感兴趣:http: //pastebin.com/HRFXQ4Bk密钥字符串用作标题:
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): 在 libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:579) 10-28 18:25:40.111: E/error(6855) : 在 libcore.net.http.HttpEngine.readResponse(HttpEngine.java:827) 10-28 18:25:40.111: E/error(6855): 在 libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283 ) 10-28 18:25:40.111: E/error(6855): 在 libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
在我的服务器上,此请求没有记录访问。但是,当我删除 auth 标头时,会根据服务器日志建立与我的服务器的连接。
那么 auth 标头是如何影响请求的呢?为什么使用header时没有连接?
顺便说一句,像这样的标题
conn.setRequestProperty("Authorization", "FOOBAR");
有效,但是由于授权标头不符合要求而被拒绝:
10-29 08:12:07.235:E/错误(23663):java.net.ConnectException:无法连接到 api.myserver.net(端口 1337):连接失败:ECONNREFUSED(连接被拒绝)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)
我的网络服务要求标头具有以下格式
match(/client=([^,]*),hash=([^,]*),timestamp=([^,]*)/);
所以这个异常不同于最初的异常。当我删除标题并禁用我的网络服务上的授权时,连接按预期工作。所以问题似乎出在自定义授权标头上。有任何想法吗?