You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio用Retrofit请求000webhost接口无响应如何解决

解决方法

你遇到的401未授权问题是接口开启了HTTP Basic身份验证导致,浏览器访问时会自动弹出认证窗口,输入过凭证后会缓存所以可以正常访问,Postman和Retrofit默认不会携带认证头所以会报错,你可以通过以下两种方式配置身份信息:


方案1:全局添加身份认证拦截器(推荐,适合所有接口统一认证场景)

直接在APIRetrofitClient的OkHttpClient配置中添加认证拦截器,所有通过这个Retrofit实例发起的请求都会自动携带认证头,修改后的getClient方法代码如下:

public static Retrofit getClient(String base_url){
    // 新增身份认证拦截器
    Interceptor authInterceptor = chain -> {
        Request originalRequest = chain.request();
        // 替换成你接口对应的真实用户名和密码
        String authCredential = Credentials.basic("你的用户名", "你的密码");
        Request authedRequest = originalRequest.newBuilder()
                .addHeader("Authorization", authCredential)
                .build();
        return chain.proceed(authedRequest);
    };

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(authInterceptor) // 把拦截器添加到OkHttp配置中
            .readTimeout(10000, TimeUnit.MILLISECONDS)
            .writeTimeout(10000, TimeUnit.MILLISECONDS)
            .connectTimeout(10000, TimeUnit.MILLISECONDS)
            .retryOnConnectionFailure(true)
            .protocols(Arrays.asList(Protocol.HTTP_1_1))
            .build();

    Gson gson = new GsonBuilder().setLenient().create();

    retrofit = new Retrofit.Builder()
            .baseUrl(base_url)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    return retrofit;
}

注意:需要导入okhttp3.Credentials、okhttp3.Interceptor、okhttp3.Request相关依赖包。


方案2:单个请求单独配置认证头(适合仅部分接口需要认证的场景)

不需要修改全局配置,直接在你的DataService接口中给对应请求添加认证头即可,有两种写法:

固定认证信息写法

public interface DataService {
    // 替换value值为你自己的Base64加密后的 用户名:密码 字符串,也可以直接用Credentials生成后复制过来
    @Headers("Authorization: Basic 你的加密后认证字符串")
    @GET("songbannner.php")
    Call<List<Ads>> GetDataBanner();
}

动态传参写法

public interface DataService {
    @GET("songbannner.php")
    Call<List<Ads>> GetDataBanner(@Header("Authorization") String authCredential);
}

调用时传入认证信息即可:

Call<List<Ads>> callback = dataService.GetDataBanner(Credentials.basic("你的用户名", "你的密码"));

验证及排查建议

  • 配置前可以先在Postman中验证凭证是否正确:打开Postman对应请求的Authorization标签,Type选择Basic Auth,输入用户名密码后发送请求,能正常返回数据再配置到Android代码中。
  • 建议在请求的onFailure回调中添加错误日志打印,方便排查其他可能的问题:
    @Override
    public void onFailure(Call<List<Ads>> call, Throwable t) {
        Log.e("请求失败", t.getMessage(), t);
    }
    
  • 如果接口是Bearer Token认证,只需要把Authorization头的value改为Bearer 你的token字符串即可,配置逻辑一致。

内容的提问来源于stack exchange,提问作者Cody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:06:03