在我的应用程序中,我使用一个api,该api的生产服务器处于打开状态,但是其dev服务器受到htaccess登录的保护。
我需要测试api开发服务器中的某些内容,但无法绕过htaccess墙。
[我以为我可以将其放在URL中,您在诸如“ https://username:[email protected]”之类的浏览器中的实现方式会引起一些公开的凭据问题,但是我可以想到一些解决方法。
但是没有骰子。我收到401未经授权的错误,然后单击链接,我得到了401未经授权的错误,它会在浏览器中完美加载api的json。
在retrofit2中是否有解决htaccess的方法?我的代码在下面,当然还有凭据和变量。
我的改装界面:
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:[email protected]/api/data0/data1/data2
2020-04-13 16:56:33.841 11675-11937/com.myapp D/OkHttp: --> POST user:[email protected]/api/data00/data1/data2
2020-04-13 16:56:34.153 11675-11937/com.myapp D/OkHttp: <-- 401 Unauthorized user:[email protected]/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:[email protected]/api/data00/data1/data2 (337ms)
添加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>>
}
并将您的基本网址更改为dev.api.biz
。您也可以使用OkHttp3中的Credentials.basic(user, password)
函数创建auth标头。