java - 为什么服务器向我返回 Java 中有效文件的响应代码 403?
问题描述
我想Content Length
通过java获取这个文件:
https://www.subf2m.co/subtitles/farsi_persian-text/SImp4fRrRnBK6j-u2RiPdXSsHSuGVCDLz4XZQLh05FnYmw92n7DZP6KqbHhwp6gfvrxazMManmskHql6va6XEfasUDxGevFRmkWJLjCzsCK50w1lwNajPoMGPTy9ebCC0&name=Q2FwdGFpbiBNYXJ2ZWwgRmFyc2lQZXJzaWFuIGhlYXJpbmcgaW1wYWlyZWQgc3VidGl0bGUgLSBTdWJmMm0gW3N1YmYybS5jb10uemlw
Firefox
当我在or中插入这个 url 时Google Chrome
,它会下载一个文件。但是当我想查看该文件的大小时Java HttpsURlConnection
,服务器返回我Response Code 403
和Content Length -1
。为什么会这样?谢谢
try {
System.out.println("program started -----------------------------------------");
String str_url = "https://www.subf2m.co/subtitles/farsi_persian-text/SImp4fRrRnBK6j-u2RiPdXSsHSuGVCDLz4XZQLh05FnYmw92n7DZP6KqbHhwp6gfvrxazMManmskHql6va6XEfasUDxGevFRmkWJLjCzsCK50w1lwNajPoMGPTy9ebCC0&name=Q2FwdGFpbiBNYXJ2ZWwgRmFyc2lQZXJzaWFuIGhlYXJpbmcgaW1wYWlyZWQgc3VidGl0bGUgLSBTdWJmMm0gW3N1YmYybS5jb10uemlw";
URL url = new URL(str_url);
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setConnectTimeout(150000);
con.setReadTimeout(150000);
con.setRequestMethod("HEAD");
con.setInstanceFollowRedirects(false);
con.setRequestProperty("Accept-Encoding", "identity");
con.setRequestProperty("connection", "close");
con.connect();
System.out.println("responseCode: " + con.getResponseCode());
System.out.println("contentLength: " + con.getContentLength());
} catch (IOException e) {
System.out.println("error | " + e.toString());
e.printStackTrace();
}
输出:
program started -----------------------------------------
responseCode: 403
contentLength: -1
解决方案
默认的 Java 用户代理被一些在线服务(最著名的是 Cloudflare)阻止。您需要将User-Agent
标题设置为其他内容。
con.setRequestProperty("User-Agent", "My-User-Agent");
以我的经验,只要它不是默认值,您将其设置为什么都没有关系:
con.setRequestProperty("User-Agent", "aaa"); // works perfectly fine
编辑:看起来这个站点使用 Cloudflare 并激活了 DDoS 保护 - 您的代码不会运行实际获取文件内容所需的 JavaScript 质询。
推荐阅读
- python - IndexError:运行 mask-rcnn 时列表索引超出范围?
- android - InputManager 自动从列表中删除无线控制器
- python - 如何修复 [Errno 20] 不是目录:'/app/myProjectManager/settings.py/staticfiles/staticfiles.json' Django
- python - 在 y 轴上绘制多个日期时间列,在 x 轴上绘制它们对应的 id
- wordpress - 所有帖子的WordPress作者更改
- laravel - Laravel:如何使用户的所有会话从 redis 无效并从所有设备注销?
- javascript - 无法使用js将文件值发送到asp.net mvc中的控制器
- python - 短信散点图
- scala - 使用 Akka HTTP 和 circe 处理 PATCH 请求以获取可空字段
- gradle - 使用IDEA时如何修复build.gradle的`import com.r3.testing.DistributeTestsBy`的红色警告?