Почему сервер возвращает мне код ответа 403 для действительного файла в Java? - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу получить Content Length этого файла по java:

https://www.subf2m.co/subtitles/farsi_persian-text/SImp4fRrRnBK6j-u2RiPdXSsHSuGVCDLz4XZQLh05FnYmw92n7DZP6KqbHhwp6gfvrxazMManmskHql6va6XEfasUDxGevFRmkWJLjCzsCK50w1lwNajPoMGPTy9ebCC0&name=Q2FwdGFpbiBNYXJ2ZWwgRmFyc2lQZXJzaWFuIGhlYXJpbmcgaW1wYWlyZWQgc3VidGl0bGUgLSBTdWJmMm0gW3N1YmYybS5jb10uemlw

Когда я вставляю этот URL в Firefox или 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

1 Ответ

1 голос
/ 24 апреля 2019

Пользовательский агент Java по умолчанию заблокирован некоторыми онлайн-сервисами (в частности, Cloudflare).Вам нужно установить заголовок User-Agent на что-то другое.

con.setRequestProperty("User-Agent", "My-User-Agent");

По моему опыту, не имеет значения, какое значение вы установили, если оно не по умолчанию:

con.setRequestProperty("User-Agent", "aaa"); // works perfectly fine



РЕДАКТИРОВАТЬ: похоже, что этот сайт использует Cloudflare с активной защитой DDoS - ваш код не будет выполнять вызов JavaScript, необходимый для фактического получения содержимого файла.

...