Модифицированный звонок с htaccess - PullRequest
0 голосов
/ 14 апреля 2020

В моем приложении я использую API, рабочий сервер которого открыт, но сервер dev защищен входом в систему htaccess.

Мне нужно протестировать что-то, находящееся на сервере dev сервера api, но не могу обойти эту стену htaccess.

Я думал, что смогу поместить ее в URL, как вы делаете в браузере, например "https://username:password@example.com", который я Осознание создает некоторые открытые проблемы с учетными данными, но я могу придумать несколько способов обойти это.

Но без кубиков. Я получаю 401 неавторизованные ошибки, а затем, когда я нажимаю на ссылку, для которой я получил 401 неавторизованную ошибку, он прекрасно загружает json API в моем браузере.

Есть ли способ обойти htaccess в retrofit2? Мой код ниже с учетными данными и переменными, конечно, скрыт.

мой модифицированный интерфейс:

public interface DevApi {
    @POST("api/{data0}/{data1}/{data2}")
    fun getMoviesByCategory(@Path("data0") data0: String, @Path("data1") data1: Int, @Path("data2") data2: Int): Single<ArrayList<KMovie>>
}

мой класс интерактора:

class KMovieInteractorImpl : KMovieInteractor {

  @Inject
  lateinit var testAPI: DevApi

  init {
    DaggerMovieInteractorComponent.create().inject(this)
  }

  override fun getGenreMovies(data0: String, data1: Int, data2: Int): Single<ArrayList<KMovie>> {
    return testAPI.getMoviesByCategory(data0, data1, data2).subscribeOn(Schedulers.io())
  }
}

выход logcat:

2020-04-13 16:56:33.839 11675-11935/com.myapp D/OkHttp: --> POST https://user:password@dev.api.biz/api/data0/data1/data2
2020-04-13 16:56:33.841 11675-11937/com.myapp D/OkHttp: --> POST user:password@dev.api.biz/api/data00/data1/data2
2020-04-13 16:56:34.153 11675-11937/com.myapp D/OkHttp: <-- 401 Unauthorized user:password@dev.api.biz/api/data0/data1/data2(312ms)
2020-04-13 16:56:34.157 11675-11937/com.myapp D/OkHttp: <address>Apache/2.4.29 (Ubuntu) Server at dev.api.biz Port 443</address>
2020-04-13 16:56:34.178 11675-11935/com.myapp D/OkHttp: <-- 401 Unauthorized https://user:password@dev.api.biz/api/data00/data1/data2 (337ms)

1 Ответ

1 голос
/ 14 апреля 2020

Добавьте заголовок Authorization:

public interface DevApi {
    @POST("api/{data0}/{data1}/{data2}")
    fun getMoviesByCategory(@Header("Authorization") auth: String, 
                            @Path("data0") data0: String, 
                            @Path("data1") data1: Int,                         
                            @Path("data2") data2: Int): Single<ArrayList<KMovie>>
}

и измените базовый URL-адрес на dev.api.biz. Вы также можете использовать функцию Credentials.basic(user, password) из OkHttp3 для создания заголовка аутентификации.

...