Android HTTP请求加上“2 get”;“不支持明文通信”;错误
我的Api接口中有一个请求:Android HTTP请求加上“2 get”;“不支持明文通信”;错误,android,android-studio,retrofit,retrofit2,Android,Android Studio,Retrofit,Retrofit2,我的Api接口中有一个请求: @FormUrlEncoded @POST(ApiStatics.authorizeURL) Call<Oauth2Model> authorizer(@Field("grant_type") String grantType, @Field("username") String userName, @Field("password") S
@FormUrlEncoded
@POST(ApiStatics.authorizeURL)
Call<Oauth2Model> authorizer(@Field("grant_type") String grantType,
@Field("username") String userName,
@Field("password") String password,
@Field("client_id") String clientID,
@Field("client_secret") String clientSecret);
我在片段中使用此api并使用此方法:
private void login(String user, String pass) {
ApiManager.getApi().authorizer("password", user, pass, ApiStatics.CID,ApiStatics.CSecret).enqueue(new Callback<Oauth2Model>() {
@Override
public void onResponse(Call<Oauth2Model> call, Response<Oauth2Model> response) {
Log.e("authorize token",""+response.body().access_token);
}
@Override
public void onFailure(Call<Oauth2Model> call, Throwable t) {
Log.e("Failure ",""+t.getLocalizedMessage());
}
});
}
private void登录(字符串用户,字符串传递){
apimager.getApi().authorizer(“密码”、用户、密码、apistics.CID、apistics.CSecret).enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.e(“授权令牌”,“+response.body().access_令牌”);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,即“+t.getLocalizedMessage());
}
});
}
运行project时,使用以下日志请求调用失败方法:
E/失败:不支持明文通信:[连接规范(密码套件=(TLS)是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰他们是一个RSA是一个带有宗教信仰的人,他们是他们是一个宗教128是一个宗教信仰的人,他们是他们是一个宗教是一个宗教信仰的人,他们是他们是一个宗教是一个宗教的人,他们是他们是一个宗教是一个宗教是一个宗教是一个宗教是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教是一个宗教的人,他们是他们是一个是一个宗教是一个宗教的人,他们是一个宗教是一个宗教是一个宗教是一个带有宗教信仰是一个带有宗教信仰的宗教C_SHA、TLS_DHE_RSA_与_AES_128_CBC_SHA、TLS_DHE_RSA_与_AES_256_CBC_SHA、TLS_RSA_与_AES_128_GCM_SHA256,TLS_RSA_与_AES_128_CBC_SHA,TLS_RSA_与_AES_256_CBC_SHA,TLS_RSA_与_3DES_EDE_CBC_SHA],TLS版本=[TLS_1_2,TLS_1,TLS_1_0],SupportSextensions=true),连接规范(CipherSuite=(TLS)是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教信仰他们是一个RSA是一个带有宗教信仰的人,他们是他们是一个宗教128是一个宗教信仰的人,他们是他们是一个宗教是一个宗教信仰的人,他们是他们是一个宗教是一个宗教的人,他们是他们是一个宗教是一个宗教是一个宗教是一个宗教是一个宗教信仰的人,他们是一个宗教信仰的人,他们是一个宗教是一个宗教的人,他们是他们是一个是一个宗教是一个宗教的人,他们是一个宗教是一个宗教是一个宗教是一个带有宗教信仰是一个带有宗教信仰的宗教C_SHA、TLS_DHE_RSA_与_AES_128_CBC_SHA、TLS_DHE_RSA_与_AES_256_CBC_SHA、TLS_RSA_与_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA],TLS版本=[TLS_1_0],SupportSTLSEXCEXTRENCES=true
我的基本URL是HTTP,而不是HTTPS。
我的登录方法使用服务器上接受的登录名(“,”)调用,
如何解决此错误?
我使用改型2.1.0,我的测试设备是nexus 5x android N,通过在我的片段中添加一个简单的getApi方法而不是ApiManager,问题解决了
private MyAPI getApi(){
Retrofit.Builder builder = new Retrofit.Builder();
builder.baseUrl(ApiManager.BASE_URL);
builder.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
return retrofit.create(MyAPI.class);
}
我现在的登录方式是:
private void login(String user, String pass) {
getApi().authorizer("password", user, pass, ApiStatics.CID,ApiStatics.CSecret).enqueue(new Callback<Oauth2Model>() {
@Override
public void onResponse(Call<Oauth2Model> call, Response<Oauth2Model> response) {
Log.e("authorize token",""+response.body().access_token);
}
@Override
public void onFailure(Call<Oauth2Model> call, Throwable t) {
Log.e("Failure ",""+t.getLocalizedMessage());
}
});
}
private void登录(字符串用户,字符串传递){
getApi().authorizer(“密码”、用户、密码、apistics.CID、apistics.CSecret).enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.e(“授权令牌”,“+response.body().access_令牌”);
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.e(“Failure”,即“+t.getLocalizedMessage());
}
});
}
有人能给我解释一下在我的ApiManager中实现getApi方法和在我的片段中实现getApi方法的区别吗?在类的顶部添加此注释
@PowerMockIgnore("javax.net.ssl.*")
它将忽略SSL检查
@PowerMockIgnore("javax.net.ssl.*")