Проблема с заголовками запроса. Я обнаружил, что это решение, размещенное на cloudflare, требует, чтобы два заголовка были такими, иначе вы получите ответ 503
:
- User-Agent - ваш заголовок указан chrome версия 76 , видимо у сервера проблема с этим. Я добился успеха с этим значением
User-Agent
: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
- cook ie - я обнаружил, что нужно установить значение cook ie
cf_clearance
и, возможно, другие set-cookie
значения, которые возвращаются по первому запросу. Это значение связано с поддержкой Cloudflare для доступа к конфиденциальности (https://blog.cloudflare.com/cloudflare-supports-privacy-pass/). Похоже, что это средство проверки того, что пользователь - человек, а не машина. Что, в свою очередь, является плохой новостью для ваших усилий.
У меня есть рабочее решение, приведенное ниже, но его будет сложно автоматизировать, поскольку для этого потребуется установить sh сеанс браузера и используйте повар ie, установленный в коде. По истечении срока действия cf_clearance cook ie вам придется снова посетить сайт и сбросить значение cook ie в коде.
Я бы также предположил, что заголовок запроса User-Agent является используется при создании cf_clearance cook ie, который требуется. Это затрудняет захват повара ie, так как вам придется использовать соответствующий User-Agent браузера, используемого для запроса, когда cf_clearance cook ie был сгенерирован cloudflare.
У меня есть журналируемых свое исследование здесь:
1028 * При посещении URL в браузере: 1030 *
https://www.lmcu.org/? cf_chl_jschl_tk = 9c114404052361017d9cfe1247981e24813649c7-1592389426-0-AfP07ha5TxZHf64q5tb5nJf9BJguC4U553-OJzJWivTqfgwYLqUODkXj-XsOjZTwpC71ROxHWx4Xhdp2S0LgAVlKgXpy7KWOex7lkoGBm8mNpBsCeJapdYNWty -X2oHE6gp_TtMfH0dcBabvWr_mXV1djsVR_IGlYJA-wCuZpPTGOozyzN9TFwjMPxU-3o6BIUxTh6DDcHmJ_Bw48EYKGpq6n57bVdeLezEs9PduataW1JUcF4GqLE2EHiUxWGubtS8YgcxkkGin4zitHXENMbFi1kMhxI77LsORzKyhkAD1OkG8fGmV - Cgd3EpxWHtHD5vpoIFFIwX0uGQywPnegs 1037 * И инспектирование ответ, что сервер дает, то получается, что это Infact дает обратно
503
, а также: 1040 *
По некоторым резонансам, которые я не могу разобрать, браузер перенаправляется на belo w URL вместо этого. Я не вижу, что заголовок местоположения передается обратно в ответ, или не могу найти этот URL в любом месте ответа.
1047 *
https://www.lmcu.org/? cf_chl_jschl_tk = fe835fdc1e7e2f5b2857ab5eb4be84e67d0e8c42-1592506549-0-AQ3E1piNGHg7O7lxgRyItR1U5BzB52q7GmCHe_HPJBsUHv8RcZCgqLPPtyngPmDjvy7pZDprPNK6ihKVEgQ7HqmbDSPXZ1aHPkBDs9re49u_Q_jI04etmtK7E0GIdxhKWCd-p4TR7b_b0JdnwzJOF6z4XaJQOgNU8kazJr5Mo96zxQpUlsKWPSumEmSfynkGeMDgkM-O1mN59LKp0p4kt-2O2IIFrlc8289ZbCSO6JghtvDsLsFDA3VxLV3Irn2W3KQ8sHg_TdwB-0g0WX9J-WTwedVYzj2a7uNtH377ZIritTXKqRw1qeQ6mkpxQ0h_OVMIl8XUiEC0Zj1KP50tUK8 1054 * Я проверил с Почтальон , и, конечно же, я тоже получил ошибку 503. Насколько я мог судить, сервер (или обратный прокси перед ним) проверял заголовки запроса и на их основе аннулировал запрос. Я немного пошутил, переместив заголовки из запроса браузера в Postman, и, наконец, понял, что это комбинация установленных заголовков
cookie
и
User-Agent
, которая позволяет обрабатывать запрос.
Заголовок User-Agent
не может иметь указанную версию chrome, у меня он работает с версией 83 здесь. Заголовок cookkie
- это то, что браузер будет заполнять при моем первом посещении сайта в браузере. Так что это немного сложнее обработать в вашем коде. Я попытался получить его в коде с connection.getHeaderField("set-cookie")
, но этот повар ie, похоже, не вырезал его.
Но! Я смог заставить код работать, когда взял cookie
из своего браузера и вручную установил его в коде вместе с User-Agent
:
public HttpURLConnection pingHttpUrl(String url) throws IOException {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
// This one does not work for the reason of the chrome version apparently
// conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76 Safari/537.36");
conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36");
conn.addRequestProperty("cookie", "<cookie value from the browser, from the header on a successful request>");
conn.setConnectTimeout(2000);
conn.setInstanceFollowRedirects(false);
conn.setReadTimeout(10000);
conn.connect();
Thread.sleep(1000);
} catch (Exception e) {
System.out.println(String.format("Caught exception : %s", e.getMessage()));
throw new IOException();
}
return conn;
}
. Позже я узнал, что это cook ie значение из ключа cf_clearance
в cook ie, которое имеет значение.