今天尝试用App访问在服务器端部署的Django后台时出现错误提示:
Forbidden (Referer checking failed - no Referer.): /api/...
API使用的Django Rest Framework 框架开发,使用浏览器访问时能正常返回数据。查了一些资料,大多数是为这个API链接添加 csrf_exempt 装饰符来解决。考虑到安全问题,不愿这样做。
后来找到一个解决方法,在App的网络访问时,添加Referer参数。
public static class HeaderInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request.Builder requestBuilder = original.newBuilder()
.addHeader("referer", Constants.BASE_URL); // BASE_URL内容为网络访问的基地址, eg: https://www.xxx.com
Request request = requestBuilder.build();
return chain.proceed(request);
}
}
// HeaderInterceptor
HeaderInterceptor headerInterceptor = new HeaderInterceptor();
// 创建OkHttpClient.Builder
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.addInterceptor(headerInterceptor)
.cookieJar(cookieJar) // 添加 Cookie 管理
参考链接