Android 使用htaccess改装呼叫
在我的应用程序中,我使用了一个api,它的生产服务器是开放的,但它的开发服务器受htaccess登录的保护 我需要测试api的开发服务器中的一些东西,但无法绕过htaccess墙 我想我可以把它放在URL中,就像你在诸如“”之类的浏览器中所做的那样,我意识到这会造成一些暴露的凭证问题,但我可以想出一些解决方法 但是没有骰子。我得到了401个未经授权的错误,然后当我点击我得到401个未经授权错误的链接时,它在我的浏览器中完美地加载了api的json 有没有办法绕过改造2中的htaccess?下面是我的代码,其中凭证和变量当然不清楚 我的改装界面:Android 使用htaccess改装呼叫,android,.htaccess,kotlin,retrofit2,logcat,Android,.htaccess,Kotlin,Retrofit2,Logcat,在我的应用程序中,我使用了一个api,它的生产服务器是开放的,但它的开发服务器受htaccess登录的保护 我需要测试api的开发服务器中的一些东西,但无法绕过htaccess墙 我想我可以把它放在URL中,就像你在诸如“”之类的浏览器中所做的那样,我意识到这会造成一些暴露的凭证问题,但我可以想出一些解决方法 但是没有骰子。我得到了401个未经授权的错误,然后当我点击我得到401个未经授权错误的链接时,它在我的浏览器中完美地加载了api的json 有没有办法绕过改造2中的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())
}
}
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)
公共接口{
@POST(“api/{data0}/{data1}/{data2}”)
fun getMoviesByCategory(@Path(“data0”)data0:String、@Path(“data1”)data1:Int、@Path(“data2”)data2:Int):单个
}
我的交互类:
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())
}
}
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)
类KMovieInteractorImpl:KMovieInteractor{
@注入
lateinit var testAPI:DevApi
初始化{
DaggerMovieInteractorComponent.create().inject(此)
}
重写有趣的getGenreMovies(data0:String、data1:Int、data2:Int):单个{
返回testAPI.getMoviesByCategory(数据0、数据1、数据2).subscribeOn(Schedulers.io())
}
}
logcat输出:
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())
}
}
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)
2020-04-13 16:56:33.839 11675-11935/com.myapp D/OkHttp:-->POSThttps://user:password@dev.api.biz/api/data0/data1/data2
2020-04-13 16:56:33.8411675-11937/com.myapp D/OkHttp:-->发布用户:password@dev.api.biz/api/data00/data1/data2
2020-04-13 16:56:34.153 11675-11937/com.myapp D/OkHttp:添加授权
标题:
公共接口{
@POST(“api/{data0}/{data1}/{data2}”)
fun getMoviesByCategory(@Header(“Authorization”)auth:String,
@路径(“data0”)data0:String,
@路径(“数据1”)数据1:Int,
@路径(“数据2”)数据2:Int:单个
}
并将基本url更改为dev.api.biz
。
您还可以使用OkHttp3中的Credentials.basic(用户、密码)
函数来创建身份验证头。iirc这只是基本的http身份验证。您需要使用值Basic
设置授权
标题,其中
是用户名:密码
base 64编码。