Android 2.3ネットワークアクセス時に、Authorizationフィールドを使用してインタフェースを検証する問題

1027 ワード

特別な穴の問題に遭遇したら、後で穴に入らないように記録します.
プロジェクトに共通のHTTPプロトコルのPOSTメソッドを書いて、4.0以上のシステムで使用しても問題がなく、結局2.3システムに変更すると故障しました.
ネットワークリクエストを行うと、パラメータ符号化の各種設定が正しく、依然として400エラーが返される Your browser sent a request that this server could not understand.
最后に本当に仕方がなくて、かばんをつかんで具体的なデータの提出内容を见て、やっと本当の原因を探し当てて、T_T.
Httpプロトコルは,要求ヘッダ情報を処理する際に,要求ヘッダの連続2つの改行(rr)をヘッダの終了フラグとして処理する.
だからリクエストヘッダがエンディングまで行かないと(rr)行を隔てた改行はできません.
ちょうど会社が作ったAPIインタフェースは、検証する権限があり、要求ヘッダAuthorizationの属性を設定する必要があります.
byte[] token = (ConstantValues.username + ":" + ConstantValues.password).getBytes("utf-8");
String authorization = "Basic "+ new String(Base64.encode(token, Base64.DEFAULT),"utf-8");
で問題が発生し、2.3のシステム上でBase 64.encode()という方法は、コンテンツをBase 64符号化した後、返される最後に改行を加えるようです.
この改行を処理しなければなりません.そうしないと、リクエストヘッダが事前に終了します.無効なアクセスを作成します.
httpPost.setRequestProperty("Authorization", authorization.trim());
Stringのtrim()メソッドを呼び出せばいいです.
Good Good Study,Day Day Fuck !!!