You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GET请求返回403 Forbidden,apitester正常但Android端异常求助

解决Android OkHttp请求返回403 Forbidden但API测试工具正常的问题

我之前也碰到过一模一样的情况——API在测试工具里跑得好好的,到Android端就直接403拒接,大概率是服务端的权限校验卡了请求细节。咱们一步步排查:

  • User-Agent 缺失或不匹配
    很多服务端会严格校验请求的User-Agent,API测试工具默认带的是浏览器风格的标识(比如Chrome的UA),但OkHttp默认的User-Agent是OkHttp/[版本号],一眼就能被识别为非浏览器请求。你可以把测试工具里的User-Agent原封不动加到请求里试试:

    .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
    
  • 遗漏了测试工具自动添加的请求头
    测试工具会悄悄帮你加一些通用头,比如AcceptAccept-EncodingAccept-Language这些,而你的代码里没加,服务端可能因为这些头缺失判定请求不合法。把测试工具里的所有请求头都复制过来:

    .addHeader("Accept", "*/*")
    .addHeader("Accept-Encoding", "gzip, deflate, br")
    .addHeader("Accept-Language", "en-US,en;q=0.9")
    
  • HMAC签名的生成或时效性问题
    你生成的auth签名可能有有效期,或者Android端生成的签名和测试工具里的不一致。建议打印出Android端的auth值,和测试工具里的对比;另外,有些签名会绑定时间戳,如果你的设备时间和服务器时间偏差太大,也会导致签名失效。

  • Referer头的细微差异
    你设置的Referer是https://hotstar.com/movies/2-states/1000034502,试试加上www改成https://www.hotstar.com/movies/2-states/1000034502——部分服务端会严格校验域名的完整性。

  • TLS版本不兼容
    有些服务端会限制TLS版本,测试工具用的是浏览器的TLS配置,而OkHttp默认配置可能不匹配。你可以强制OkHttp使用更高版本的TLS:

    OkHttpClient client = new OkHttpClient.Builder()
        .connectionSpecs(Arrays.asList(ConnectionSpec.MODERN_TLS))
        .build();
    

优先从User-Agent入手调整,这是最常见的403诱因,一般改完就能正常请求了。

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

火山引擎 最新活动