открыть код сайта в Java как иллюзия веб-браузера

1

Я хочу открыть веб-сайт в веб-браузере. Я знаю, что это легко, но я хочу сделать это по-другому... Это похоже на прокси-сервер. Я сделал код Java, который будет получать контент (исходный код) веб-страницы и когда браузер запрашивает localhost по определенному номеру порта этого кода пишет исходный код в браузере. Но вместо того, чтобы получать веб-страницу, я получаю исходный код веб-страницы в браузере, а также я хочу сделать запрос из java-кода как иллюзию браузера. Сервер должен чувствовать, что этот запрос сделан из браузера, а не из java-консоли.

import java.net.*;
import java.io.*;

public class URLConnectionReader {
public static void main(String args[]) throws Exception{
    URL ul = null;
    HttpURLConnection ulc = null;

    ServerSocket server = null;
    Socket client = null;
    DataInputStream in = null;
    DataOutputStream out = null;
    String c = null;

        server = new ServerSocket(9898);
        System.out.println("Server is waiting for clients on port no 9898....");
        while(client == null){
        client = server.accept();
        }
        System.out.println("Connected.....");
        out = new DataOutputStream(client.getOutputStream());

        ul = new URL("http://www.google.com");
        ulc = (HttpURLConnection)ul.openConnection();
        in = new DataInputStream(ulc.getInputStream());

        while((c = in.readLine())!=null){
            out.writeBytes(c);
        }
        in.close();
        out.close();
        client.close();

 }
}
  • 0
    попробуйте отправить данные в текстовый файл, а затем использовать текстовый файл в качестве источника и поэкспериментировать с ним, особенно с заголовком. также обязательно попробуйте поискать источник веб-страницы в chrome и firefox.
  • 0
    это работает, и я сделал это раньше, но я хотел прямой связи между браузером и моим локальным сервером ... но его поведение непредсказуемо. иногда это работает, а иногда нет. Поэтому мне нужен способ обработки этих ресурсов, предоставляемый google.com (в этом примере). Простой текстовый ответ я сохраняю в строке и пишу в клиент (браузер). Но он не работает все время
Показать ещё 1 комментарий
Теги:
networking

1 ответ

0

Загрузка веб-страниц не так проста, как вы, наверное, думаете. Оба браузера и сервера используют протокол HTTP. Проще говоря, браузер отправляет запрос, состоящий из строки запроса, заголовков, а иногда и данных, и сервер отвечает линией ответа, заголовками и данными. На большинстве веб-страниц также есть связанные ресурсы, которые необходимо загрузить для отображения страницы (например, изображения, таблицы стилей и сценариев), и каждый ресурс загружается через отдельный запрос.

Ваша программа принимает только один запрос, полностью игнорирует детали запроса, а затем загружает фиксированную веб-страницу и отправляет ее в качестве ответа. Как вы загружаете веб-страницу (с URL), вы получаете только часть данных ответа (источник страницы); строка ответа и заголовки отсутствуют. Заголовки очень важны, поскольку один из них (называемый "Content-Type") указывает, какой именно ресурс - веб-страница, изображение или что-то еще. Без этого браузеры обычно предполагают, что данные являются простым текстом и отображают его соответствующим образом.

Поэтому, если вы хотите, чтобы ваш эксперимент работал лучше, вам нужно убедиться, что вы отправляете полный и действительный HTTP-ответ в браузер. Вероятно, вы можете восстановить линию ответа и заголовки из объекта HttpURLConnection. Или вы можете напрямую использовать сокеты для загрузки веб-страницы.

Лучшим решением было бы использовать веб-сервер java (например, Jetty), в котором вы запустили сервлет, который загружает удаленную страницу с помощью клиентской библиотеки HTTP (например, Apache HttpComponents) и выполняет необходимую обработку адресов и заголовков. Но.. маленькие шаги :)

  • 0
    хорошо ... это сделано .. я установил user_agent, charset и content-type, теперь он дает мне нестандартную страницу ... но как я могу теперь получить все эти файлы и ресурсы, используя заголовки ?? можешь дать мне какую-нибудь ссылку ???
  • 0
    извините, чувак .. я в замешательстве .. я добавил необходимые заголовки, но поведение моей программы непредсказуемо ... я имею в виду, что иногда он показывает веб-страницу, а иногда просто текст (исходный код) ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню