更新:問題がURLをエンコードする必要を行うにはではありません。これはRetrofitによって行われます。私はURLをエンコードして、改造することを渡すと、URLは二回エンコードされ、このように見える終わるます:はなぜレトロフィットは、私のURL要求から特定の文字を省略していますか?
%257C
に注意してください。第1ラウンドは| -> %7C
です。第二ラウンドは、%7C -> %257C
である私は、レトロフィットを使用してHTTP GETリクエストを実行しようとしています。要求は次のようになります。
Request{method=GET, url=https://example.com/api/get_user_info/?id=12345&[email protected]|1492357107|fyVzRUYC9h|4f889e1976c2cd87aac, tag=null}
(から撮影:私はこのクエリを実行すると、コードで https://example.com/api/get_user_info/?id=12345&[email protected]|1492357107|fyVzRUYC9h|4f889e1976c2cd87aac
、呼び出しはこの
@GET("get_user_info")
Call<ResponseBody> getUserMeta(
@Query("id") int userId,
@Query("cookie") String cookie
);
のように見える、Request
は次のようになりますコンソール呼び出しが実行された後call.request().toString()
)
をログインした後、私は自分からエラーを受け取りますCookieが無効であることを示すAPI。応答は次のようになります。
(logginResponse<ResponseBody> response.toString()
後にコンソールからの引用)
Response{protocol=h2, code=404, message=, url=https://example.com/api/get_user_info/?id=12345&[email protected]}
あなたが見ることができるように、2つのURLは同じではありません。 |
文字が何とか応答のURLでクッキーのパラメータから削除されました。
これは私のAPIと関係があり、実際にはCookieが正しくないと思われるかもしれませんが、Request
のURLをコピーしてブラウザに直接貼り付けると、エラーなし(ステータス200)で実行されます。レトロフィットがコールを実行した場合、私はレトロフィットが第二、間違ったURLを実行している、明らかに
404を取得します。最初のURLはブラウザで実行されたとき404を返さないが、2番目のURLは404を返すので、これは明らかです。
何が起こっていますか?どんな助けでも大歓迎です。
追加情報:
私は私のアプリモジュールのbuild.gradleにcompile 'com.squareup.retrofit2:retrofit:2.2.0'
を使用しています。
私はそうのように私のレトロフィットクライアントをインスタンス化しています:
Retrofit retroFit = new Retrofit.Builder()
.baseUrl("https://example.com/api/")
.build();
URLは%7C' – Compass