如何修复Kotlin Retrofit调用谷歌翻译API的‘缺少有效API密钥’错误?
修复Retrofit调用RapidAPI谷歌翻译时的403权限错误
下面是针对你遇到的"缺少有效API密钥"403错误的具体修复指南:
1. 修正请求参数传递方式
RapidAPI提供的谷歌翻译v2接口要求POST请求的参数通过表单字段传递,而非URL查询参数。你当前用@Query会把参数拼在URL里,不符合接口要求,这可能导致API服务无法正确识别请求,进而误判为缺少密钥。
修改接口代码,改用@FormUrlEncoded和@Field:
interface GoogleTranslationApi { @FormUrlEncoded @POST("language/translate/v2") @Headers( "Accept-Encoding: application/gzip", "X-RapidAPI-Host: google-translate1.p.rapidapi.com" ) suspend fun getTranslate( @Header("X-RapidAPI-Key") apiKey: String, @Field("q") q: String, @Field("target") target: String, @Field("source") source: String ): Response<TranslationResponse> }
同时建议创建数据类接收响应,避免直接用Response<String>难以解析:
data class TranslationResponse( val data: Data ) data class Data( val translations: List<Translation> ) data class Translation( val translatedText: String )
2. 改用动态Header传递API密钥
静态@Headers里硬编码密钥可能存在格式问题(比如空格、隐藏字符),改用动态@Header可以确保密钥被正确传递。调用接口时传入你的密钥:
val apiKey = "c07540b849msh5f1b436e04531f9p167645jsn27e8********" val response = googleTranslationApi.getTranslate(apiKey, "Hello", "zh", "en")
3. 检查Retrofit实例配置
确保你的Retrofit实例添加了合适的转换器(比如GsonConverter),否则可能导致请求/响应解析异常,间接引发权限错误:
val retrofit = Retrofit.Builder() .baseUrl("https://google-translate1.p.rapidapi.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val googleTranslationApi = retrofit.create(GoogleTranslationApi::class.java)
4. 验证API密钥有效性
用Postman或curl直接调用接口,排除Retrofit代码问题:
curl -X POST "https://google-translate1.p.rapidapi.com/language/translate/v2" \ -H "X-RapidAPI-Key: 你的完整密钥" \ -H "X-RapidAPI-Host: google-translate1.p.rapidapi.com" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "q=Hello&target=zh&source=en"
如果这个请求成功,说明问题出在Retrofit代码配置上;如果同样报错,联系RapidAPI客服确认密钥权限或接口状态。
内容的提问来源于stack exchange,提问作者HaBuiDuc
相关产品推荐
相关产品推荐

