如何解决 android studio 中 Cowin Public API 的错误代码 403?
How to resolve error Code 403 from Cowin Public API in android studio?
这是 link 到凯文 Public API:
- https://apisetu.gov.in/public/marketplace/api/cowin#/
- https://cdn-api.co-vin.in/api/v2/admin/location/states
我一直在尝试使用改装库从 android 工作室的第二个 link 获取状态详细信息。但每次我 运行 应用程序都显示错误 403。任何帮助将不胜感激!在下面添加我的代码:
- 创建时 activity:
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://cdn-api.co-vin.in/api/").addConverterFactory(GsonConverterFactory.create()).build();
CovidAPI covidAPI = retrofit.create(CovidAPI.class);
Call<StateMainModel> call = covidAPI.getAllIndiaStates();
call.enqueue(new Callback<StateMainModel>() {
@Override
public void onResponse(Call<StateMainModel> call, Response<StateMainModel> response) {
if(!response.isSuccessful())
{
Toast.makeText(getApplicationContext(),"Error!!Code: "+response.code()+response.toString(),Toast.LENGTH_SHORT).show();
tv.setText(response.toString());
return;
}
else
{
StateMainModel stateMainModel = response.body();
int size = stateMainModel.getStates().size();
for(int i=0;i<size;i++)
{
stateList.add(stateMainModel.getStates().get(i).getState_name());
}
stateAutoCompleteTextView.setAdapter(stateAdapter);
}
}
@Override
public void onFailure(Call<StateMainModel> call, Throwable t) {
Toast.makeText(getApplicationContext(),"Error!! Response: "+t.getMessage(),Toast.LENGTH_LONG).show();
}
});
- API 界面
@GET("v2/admin/location/states")
Call<StateMainModel> getAllIndiaStates();
- StateMainModel 模型Class
private ArrayList<StateIdNameModel> states;
private Integer ttl;
public StateMainModel() {
}
public StateMainModel(ArrayList<StateIdNameModel> states,Integer ttl) {
this.states = states;
this.ttl = ttl;
}
public ArrayList<StateIdNameModel> getStates() {
return states;
}
public void setStates(ArrayList<StateIdNameModel> states) {
this.states = states;
}
public Integer getTtl() {
return ttl;
}
public void setTtl(Integer ttl) {
this.ttl = ttl;
}
您必须在请求中设置用户代理才能获得成功响应。请参阅以下 Kotlin 代码:
val okHttpClientBuilder = OkHttpClient.Builder()
val logger = HttpLoggingInterceptor().apply { level = Level.BODY}
okHttpClientBuilder.addNetworkInterceptor { chain ->
chain.proceed(chain.request()
.newBuilder()
.header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")
.build())
}.addNetworkInterceptor(logger)
val retrofit = Retrofit.Builder()
.baseUrl("https://cdn-api.co-vin.in/api/v2/")
.client(okHttpClientBuilder.build())
.addConverterFactory(MoshiConverterFactory.create())
.build()
这是对我有用的 Java 代码:
OkHttpClient client = new OkHttpClient();
client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder().header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36").build();
return chain.proceed(requestWithUserAgent);
}
}).build();
您首先需要创建一个 class OkHttpClient 的对象,然后您必须向其添加拦截器,因为它需要密钥才能访问 api
这是 link 到凯文 Public API:
- https://apisetu.gov.in/public/marketplace/api/cowin#/
- https://cdn-api.co-vin.in/api/v2/admin/location/states
我一直在尝试使用改装库从 android 工作室的第二个 link 获取状态详细信息。但每次我 运行 应用程序都显示错误 403。任何帮助将不胜感激!在下面添加我的代码:
- 创建时 activity:
Retrofit retrofit = new Retrofit.Builder().baseUrl("https://cdn-api.co-vin.in/api/").addConverterFactory(GsonConverterFactory.create()).build();
CovidAPI covidAPI = retrofit.create(CovidAPI.class);
Call<StateMainModel> call = covidAPI.getAllIndiaStates();
call.enqueue(new Callback<StateMainModel>() {
@Override
public void onResponse(Call<StateMainModel> call, Response<StateMainModel> response) {
if(!response.isSuccessful())
{
Toast.makeText(getApplicationContext(),"Error!!Code: "+response.code()+response.toString(),Toast.LENGTH_SHORT).show();
tv.setText(response.toString());
return;
}
else
{
StateMainModel stateMainModel = response.body();
int size = stateMainModel.getStates().size();
for(int i=0;i<size;i++)
{
stateList.add(stateMainModel.getStates().get(i).getState_name());
}
stateAutoCompleteTextView.setAdapter(stateAdapter);
}
}
@Override
public void onFailure(Call<StateMainModel> call, Throwable t) {
Toast.makeText(getApplicationContext(),"Error!! Response: "+t.getMessage(),Toast.LENGTH_LONG).show();
}
});
- API 界面
@GET("v2/admin/location/states")
Call<StateMainModel> getAllIndiaStates();
- StateMainModel 模型Class
private ArrayList<StateIdNameModel> states;
private Integer ttl;
public StateMainModel() {
}
public StateMainModel(ArrayList<StateIdNameModel> states,Integer ttl) {
this.states = states;
this.ttl = ttl;
}
public ArrayList<StateIdNameModel> getStates() {
return states;
}
public void setStates(ArrayList<StateIdNameModel> states) {
this.states = states;
}
public Integer getTtl() {
return ttl;
}
public void setTtl(Integer ttl) {
this.ttl = ttl;
}
您必须在请求中设置用户代理才能获得成功响应。请参阅以下 Kotlin 代码:
val okHttpClientBuilder = OkHttpClient.Builder()
val logger = HttpLoggingInterceptor().apply { level = Level.BODY}
okHttpClientBuilder.addNetworkInterceptor { chain ->
chain.proceed(chain.request()
.newBuilder()
.header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")
.build())
}.addNetworkInterceptor(logger)
val retrofit = Retrofit.Builder()
.baseUrl("https://cdn-api.co-vin.in/api/v2/")
.client(okHttpClientBuilder.build())
.addConverterFactory(MoshiConverterFactory.create())
.build()
这是对我有用的 Java 代码:
OkHttpClient client = new OkHttpClient();
client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder().header("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36").build();
return chain.proceed(requestWithUserAgent);
}
}).build();
您首先需要创建一个 class OkHttpClient 的对象,然后您必须向其添加拦截器,因为它需要密钥才能访问 api