代码之家  ›  专栏  ›  技术社区  ›  Романыч

改装,okhttp3添加收割台

  •  0
  • Романыч  · 技术社区  · 6 年前

    我需要从站点获取XML文件。我正在学习使用改装。 我需要发出请求并通过 "X-AppId" 标题。应该是这样的:

    X-AppId: my key.
    

    如果我从浏览器中执行此操作,我会得到答案。 通过改装我可以进入

    错误403禁止代码=403,消息=禁止,url=https://

    告诉我如何正确实现以从服务器接收应答 code = 200

    以下是我的实现:

    public interface myAPIinterface {
    @GET("/api/ru/index/route/?from=Minsk&to=Warsaw")
    Call<Routes> getProducts();
    

    }

    这是我输出到日志的活动:

    private void getProducts(){
        final ProgressDialog loading = ProgressDialog.show(this,"Fetching Data","Please wait...",false,false);
        OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        Log.d(TAG, "getProducts");
        httpClient.addInterceptor(new Interceptor() {
            @Override
            public okhttp3.Response intercept(Chain chain) throws IOException {
                Request request = chain.request()
                        .newBuilder()
                        .addHeader("X-AppId:", "97377f7b702d7198e47a2bf12eec74")
                        .build();
                return chain.proceed(request);
            }
        });
    
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://rasp.rw.by")
                .addConverterFactory(SimpleXmlConverterFactory.create())
                .build();
        myAPIinterface api = retrofit.create(myAPIinterface.class);
    Call<Routes> call = api.getProducts();
        call.enqueue(new Callback<Routes>() {
            @Override
            public void onResponse(@NonNull Call<Routes> call, @NonNull Response<Routes> response) {
                Log.d(TAG, "onResponse");
                Log.d(TAG, String.valueOf(kk));
                Log.d(TAG, String.valueOf(response));
                loading.dismiss();}
           @Override
            public void onFailure(Call<Routes> call, Throwable throwable) {
                loading.dismiss();
                Log.d(TAG, "onFailure" + throwable);
            }
        });
    

    这是一个日志:

    响应{协议=http/1.1,代码=403,消息=禁止, url地址= https://rasp.rw.by/api/ru/index/route/?from=Minsk&to=Warsaw }

    1 回复  |  直到 6 年前
        1
  •  0
  •   Vlad Kramarenko    6 年前

    哦,老兄,你在干什么。您可以使用诸如@Query、@Header等注释。

    public interface myAPIinterface {
    
        @GET("/api/ru/index/route")
        Call<Routes> getProducts(@Header("X-AppId:") String YOUR_APP_ID,
                                 @Query("from") String from,
                                 @Query("to") String to)
    }
    

    然后您可以创建如下请求:

    Retrofit retrofit = new Retrofit.Builder(). 
    .baseUrl("https://rasp.rw.by")
    .addConverterFactory(SimpleXmlConverterFactory.create())
    .build();
    
    retrofit.create(myAPIinterface.class).getProducts(myId, "Minsk", "Warsaw").enqueue ...
    

    它有什么帮助?您忘记在第二次改装时添加标题,然后出现403错误。因此,必须添加注释,这将是最后一个错误,因为您忘记将值添加到标题/查询等。