我正在开发一个 Android 项目,我需要使用 Kotlin 中的 Retrofit 库向搜索端点发送 HTTP 请求。当我直接在浏览器中输入 URL 时,该请求工作正常,但当我尝试以编程方式发送请求时,我收到 403 错误。
这是我尝试请求的 URL:https://apkpure.com/search?q=free+fire
这是我设置 Retrofit 并进行调用的代码片段:
interface ApiService {
@GET("search?q=free+fire&t=")
suspend fun searchResults(): Response<String>
}
val retrofit = Retrofit.Builder()
.baseUrl("https://apkpure.com/")
.addConverterFactory(ScalarsConverterFactory.create())
.build()
.create(ApiService::class.java)
当我执行请求时,出现以下错误:
Response Error: 403, Error Body: <!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html;
服务器似乎拒绝了我的编程请求,但当我使用网络浏览器时却没有。这可能与用户代理验证或服务器正在执行的某种其他形式的请求验证有关吗?
如何修改我的请求以避免此错误并像浏览器一样成功检索数据?
我尝试根据我的请求添加用户代理,这样可能会解决问题,但没有,这是代码:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val originalRequest = chain.request()
val requestWithUserAgent = originalRequest.newBuilder()
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3")
.build()
chain.proceed(requestWithUserAgent)
}
.build()
val retrofit = Retrofit.Builder()
.baseUrl("https://apkpure.com/")
.client(okHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.build()
.create(ApiService::class.java)
仍然给出同样的错误...
我用 Postman 测试过它,它可以返回页面的 html 正文几次,但尝试 10 次后,它将返回 403 Forbidden。
您可能在短时间内调用它太多次,然后它就阻止了您的请求