カスタム認証ヘッダーを使用して 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/エラー(6855): java.io.EOFException 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:25:40.111: E/エラー (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/エラー (6855): libcore.net.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:177) で
私のサーバーでは、このリクエストによってアクセスがログに記録されませんでした。ただし、認証ヘッダーを削除すると、サーバーログに従ってサーバーへの接続が確立されます。
では、認証ヘッダーはリクエストにどのように影響するのでしょうか? ヘッダーを使用しているときに接続がないのはなぜですか?
ところで、次のようなヘッダー
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): libcore.io.IoBridge.connect(IoBridge.java:114) 10-29 08:12:07.235: E/error(23663): java.net.PlainSocketImpl.connect( PlainSocketImpl.java:192) 10-29 08:12:07.235: E/エラー (23663): java.net.PlainSocketImpl.connect (PlainSocketImpl.java:459) で
私の Web サービスでは、ヘッダーに次の形式が必要です
match(/client=([^,]*),hash=([^,]*),timestamp=([^,]*)/);
したがって、この例外は最初の例外とは異なります。ヘッダーを削除して Web サービスの認証を無効にすると、接続は期待どおりに機能します。したがって、問題はカスタム認証ヘッダーにあるようです。何か案は?