使用 htaccess 改造调用
Retrofit call with htaccess
在我的应用程序中,我使用 api,其生产服务器是开放的,但其开发服务器受 htaccess 登录保护。
我需要测试 api 的开发服务器中的一些东西,但无法绕过 htaccess 墙。
我想我可以把它放在 URL 中,就像你在浏览器中做的那样,比如“https://username:password@example.com”,我意识到这会产生一些暴露的凭据问题,但我可以想到一个一些解决方法。
但是没有骰子。我收到 401 未经授权的错误,然后当我单击 link 时,我收到 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:
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)
添加一个Authorization
header:
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
。
您还可以使用 OkHttp3 中的 Credentials.basic(user, password)
函数来创建身份验证 header.
在我的应用程序中,我使用 api,其生产服务器是开放的,但其开发服务器受 htaccess 登录保护。
我需要测试 api 的开发服务器中的一些东西,但无法绕过 htaccess 墙。
我想我可以把它放在 URL 中,就像你在浏览器中做的那样,比如“https://username:password@example.com”,我意识到这会产生一些暴露的凭据问题,但我可以想到一个一些解决方法。
但是没有骰子。我收到 401 未经授权的错误,然后当我单击 link 时,我收到 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:
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)
添加一个Authorization
header:
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
。
您还可以使用 OkHttp3 中的 Credentials.basic(user, password)
函数来创建身份验证 header.