Я пытаюсь открыть веб-сайт своего университета, чтобы прочитать их меню. Я написал версию, которая читает меню с ссылкой на ссылку непосредственно на ссылку меню, но я хочу немного оттянуть ее, чтобы я мог читать меню с сайта, а не прямую ссылку (в случае, если ссылка когда-либо меняется) ,Не похож ли сайт на Java?
Вот URL Я открываю: https://nccudining.sodexomyway.com/dining-choices/index.html
Всякий раз, когда я открываю ссылку на веб-сайт, это выход, который я получаю:
302
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://m-nccudining.sodexomyway.com/dining-choices/index.html">here</a>.</h2>
</body></html>
URL, он выводит это мобильная версия веб-сайта, но когда я пытаюсь использовать этот URL-адрес, он ничего не выводит.
Это мой код:
import java.io.*;
import java.net.*;
public class test
{
public static void main(String[] args)
{
URL url = null;
try
{
url = new URL("https://nccudining.sodexomyway.com/dining-choices/index.html");
HttpURLConnection test = (HttpURLConnection) url.openConnection();
test.setInstanceFollowRedirects(true);
test.connect();
System.out.println(test.getResponseCode());
} catch (MalformedURLException e1)
{
System.out.println("URL cannot be opened.");
return;
}
BufferedReader in = null;
try
{
in = new BufferedReader(new InputStreamReader(url.openStream()));
} catch (IOException e)
{
System.out.println("Error");
}
String inputLine;
try
{
while ((inputLine = in.readLine()) != null)
{
System.out.println(inputLine);
}
} catch (IOException e)
{
System.out.println("Error");
}
}
}
Я извиняюсь за все циклы Try/улове. Я не хочу просто бросать исключение IOException из основного с самого начала, потому что я слышал, что это плохая практика. Во всяком случае, этот код просто открывает URL-адрес, устанавливает соединение, поэтому я могу убедиться, что URL-адрес действительно существует, и попробуйте прочитать его. Он работает на любом другом сайте, на котором я его пробовал, включая google.
Мой вопрос: почему мой код не будет читать правильный исходный код веб-сайта? Это что-то не так с моим кодом (я решил добавить в HttpsURLConnection и разрешить переадресацию), или это просто веб-сайт, и есть ли что-нибудь, что я могу сделать, чтобы обойти это, кроме как только открыть страницу еженедельного меню?
Решение найдено! Благодаря @ShayHaned для исправлений. Я добавил следующие строки к HttpURLConnection так что я получил код 200 ответа, а не 302:
test = (HttpURLConnection) url.openConnection();
test.setRequestMethod("GET");
test.setRequestProperty("User-Agent", "Mozilla/5.0");
test.setInstanceFollowRedirects(true);
Тогда я изменил InputStream от открытия потока из URL, чтобы получить входной поток из HttpURLConnection, как показано на рисунке :
BufferedReader in = new BufferedReader(new InputStreamReader(test.getInputStream()));
Это дало мне HTML-код, который я искал.
Что такое код ответа? Если это не 301 или аналогичный, проблема на сервере: они не выдают перенаправление, поэтому Java не следует за ним. – EJP
@EJP Вот что в его первом блоке кода ... –
Он читает HTML-страницу веб-страницы. Прямо сейчас, он ничего не делает с тем, что он читает, так как я просто хотел, чтобы это исправлено. – ds777fighter