Android中用Retrofit调用GitHub搜索API遇HTTP 422错误求助
解决Retrofit调用GitHub搜索API返回HTTP 422的问题
HTTP 422(Unprocessable Entity)错误的核心原因是GitHub API强制要求所有请求携带User-Agent请求头,而Retrofit默认不会自动添加该头,导致请求被API拒绝。以下是具体解决步骤:
1. 为OkHttpClient添加User-Agent拦截器
通过OkHttp拦截器为所有请求注入User-Agent字段(可填写你的应用名称、GitHub用户名等标识信息):
val okHttpClient = OkHttpClient.Builder() .addInterceptor { chain -> val modifiedRequest = chain.request().newBuilder() // 替换为你的应用标识,比如"MyGitHubSearchApp" .header("User-Agent", "Your-App-Identifier") .build() chain.proceed(modifiedRequest) } .build()
2. 绑定配置好的OkHttpClient到Retrofit
创建Retrofit实例时使用上述配置的OkHttpClient,同时确保已添加JSON转换器(如GsonConverterFactory):
val retrofit = Retrofit.Builder() .baseUrl("https://api.github.com/") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .build() val apiService = retrofit.create(ApiService::class.java)
额外排查点
若添加User-Agent后问题仍存在,可检查以下内容:
- 调用
getUsers时传入的searchQuery参数是否为空或无效值(比如空字符串) - 核对
UserResponse及内部Item的字段名是否与GitHub API返回的JSON字段完全匹配(注意下划线命名的一致性) - 确认AndroidManifest.xml中已声明网络权限:
<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者Sahar Batool
相关产品推荐
相关产品推荐

