如何解决 android studio 中 Cowin Public API 的错误代码 403?

Posted

技术标签:

【中文标题】如何解决 android studio 中 Cowin Public API 的错误代码 403?【英文标题】:How to resolve error Code 403 from Cowin Public API in android studio? 【发布时间】:2021-10-02 12:31:39 【问题描述】:

这是 Cowin 公共 API 的链接:

    https://apisetu.gov.in/public/marketplace/api/cowin#/ https://cdn-api.co-vin.in/api/v2/admin/location/states

我一直在尝试使用改造库从 android studio 中的第二个链接获取状态详细信息。但每次我运行该应用程序时,它都会显示错误 403。任何帮助将不胜感激!在下面添加我的代码:

    关于创建活动:
    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 模型类
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;
    

【问题讨论】:

【参考方案1】:

您首先需要创建一个 OkHttpClient 类的对象,然后您必须为其添加拦截器,因为它需要密钥才能访问 api

【讨论】:

【参考方案2】:

您必须在请求中设置 User-Agent 才能获得成功的响应。请参阅下面的 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 中设置用户代理吗? 在这里查看答案:***.com/a/63996219/6147653 谢谢哥们!!有效。顺便说一句,我们为什么需要使用它? 他们只限制了浏览器的 API,所以我用浏览器用户代理尝试了它,它起作用了。【参考方案3】:

这是对我有用的 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();

【讨论】:

以上是关于如何解决 android studio 中 Cowin Public API 的错误代码 403?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决:Android Studio 中 RunConfiguration 的 Android ClassFormatError

我在构建应用程序时在 android studio 中遇到了 Android 资源链接失败错误。我不知道如何解决这个问题。我是 Android Studio 的新手 [关闭]

如何解决 Android Studio 中组件重叠的问题?

如何解决android studio2.3导入android studio2.1的问题

android studio setup安装报错,该如何解决?

Android studio的preview界面一直在加载,该如何解决?