#java
#java
Вопрос:
Я создаю программу, которая должна брать цены на некоторые товары из Интернета. Мне удалось сделать это для нескольких первых продуктов, но затем я получил URL, который либо считывался с 503 ответами с сервера, либо считывался не полностью (теги с ценой не были включены в выходные данные). Вот мой код:
import java.net.*;
import java.io.*;
import java.util.Properties;
public class Test {
public static void main(String[] args) throws Exception {
new Test().connect();
}
public void connect() {
try {
String url = "https://antoshka.ua/ua/nabir-lakiv-dlya-nigtiv-make-it-real-rusalonka-3-sht6282464.html",
proxy = "proxy.mydomain.com",
port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);
} catch(Exception e) {
e.printStackTrace();
}
}
public void readResponse(InputStream is) throws IOException {
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result = bis.read();
while(result != -1) {
byte b = (byte)resu<
buf.write(b);
result = bis.read();
}
System.out.println(buf.toString());
}
}
И вот URL, который я пытаюсь прочитать:https://antoshka.ua/ua/nabir-lakiv-dlya-nigtiv-make-it-real-rusalonka-3-sht6282464.html
Комментарии:
1. коды 5xx — это коды ошибок сервера. Вы ничего не можете с ними поделать
2. Вы выполняете веб-очистку на сайте, который использует некоторую защиту от запросов по сценарию. Этические проблемы в сторону, но обычный веб-браузер оставляет множество отпечатков пальцев, которые помогают этим охранникам обнаружить, что клиентом управляет человек, а не какой-то скрипт. Одним из вариантов является имитация отпечатков пальцев браузера, таких как заголовки, файлы cookie и так далее. Другим вариантом может быть использование WebDriver для управления браузером для выполнения запросов. Вы можете попробовать selenide.org .
3. @iTollu вы написали в своем комментарии: сайт, который использует некоторую защиту от скриптовых запросов Мне любопытно, откуда вы это знаете?
4. @Abra Когда я попытался получить доступ к этому сайту, мне была представлена КАПЧА, чтобы доказать, что я человек.
5. Нет, REST API не существует для первичной информации. Эта страница отрисована сервером. Такие вещи, как отслеживание, доступность на складе, рекомендации — они используют вызовы AJAX. Но не основной контент. Что имеет смысл с точки зрения SEO и UX. Вы можете изучить вызовы XHR, например, с помощью инструментов разработчика Chrome.
Ответ №1:
Если вы просмотрите его в режиме инкогнито, вы увидите это
Какой разум может быть причиной проблемы. Это также означает, что эта страница защищена от ботов.
Также ожидание в течение 6 секунд после этой команды
server.openConnection();
разум решает вашу проблему
Мой совет — использовать REST API (если он существует). Я не русский, поэтому не могу найти REST API этой веб-страницы для вас.
Комментарии:
1. Спасибо за ответ. Что вы имеете в виду под «подождите 6 секунд»? Поток.спящий режим (6000) или соединение.ожидание(6000)? В любом случае, эти два не помогают.
2. Я понимаю логику, но даже когда я открываю эту ссылку в режиме инкогнито, я не вижу страницу перенаправления. Возможно, проблема в перенаправлении, но почему я получил часть html на реальной странице, я думаю, я должен получить маленький html, где написано «перенаправление».
3. @Саша Шляхова Я не знаю, чего вы пытаетесь здесь достичь. Веб-сайты этого типа имеют API, позволяющие просматривать их данные, даже моя личная страница имеет REST API. Если вы не пытаетесь взломать их или что-то еще, вам не нужно делать это таким образом. Если у них нет API, это означает, что они не хотят, чтобы боты были в их системе. Если они позволят вам получить эти данные, они предоставят их с помощью API, и если вы попытаетесь получить данные другими способами, вы всегда будете получать ошибки, подобные этой.