私はAPIにリクエストしてユーザーをログインさせようとしていますが、encoded = true
に設定されていても、Retrofit 2メソッドでエンコードされるセクションがあります。ベースURLはhttps://testapi.test.ie
です。serverext
として渡されるパラメータはmdc.php?action=
ですが、encoded = true
を設定した後でも、結果のリクエストボディはhttps://testapi.test.ie/mdc.php%3Faction=login_user&ts=1482924232742
です。https://testapi.test.ie/mdc.php?action=login_user&ts=1482924232742
ですので、問題が?
シンボルであることがわかります。以下は私の改造方法は、誰もがこれを助けることができるならば、私は正しいRetrofit 2エンコーディングの特殊文字に関する問題
@retrofit2.http.POST("/{serverext}login_user&ts={timestamp}")
@retrofit2.http.Multipart
Call<LoginResponseModel> loginUser(@retrofit2.http.Path(value = "serverext", encoded = true) String server,
@retrofit2.http.Part(Constants.USER) String username,
@retrofit2.http.Part(Constants.PASS) String password,
@retrofit2.http.Path("timestamp") Long timestamp);
この形式に変更すると、要求は正しく形成されますが、APIからのエラー応答が返されます。無効な資格情報は、資格情報が正しいため正しくありません。私は、@ Queryでなく@Pathとして必要と思う。私は1.9からアップグレードしていて、それは@ Pathで正しく動作していました。このエンコーディングの特殊文字はretrofit2またはokhttp3の制限ですか? –
私はエンコーディングについてはわかりませんが、APIを正しく使用していません。あなたの要求を確認できますか?実際に間違っているのは何ですか? –
私は現在、1.9から2.0にアップグレードしています。1.9では、@POST( "/ {server} login_user&ts = {timestamp}")のようにAPIを使用しました。 @ Multipart void loginUser(@Path(value = "server" (タイムスタンプ、タイムスタンプ、コールバックコールバック); 'これは機能しました(エンコードはfalseです)このテストはサーバからの結果が正しいことを証明するものです。 –