Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как на java запустить сайт и обработать ответ.  [new]
artur1234
Member

Откуда:
Сообщений: 17
Есть определенный сайт при входе на его страницу возвращается ответ в виде файла json.
Я пишу web приложение c использованием сервлетов.
Мое приложение находится по адресу HTTP://мое_приложение.
В приложение есть кнопка при нажатии на которую срабатывает переход на страницу мое_приложение/страница_запроса.
Переход на страницу запроса у меня слушает определенный сервлет.
Так вот нужно чтобы этот сервлет автоматом выполнил действия:
1) вход на определенный сайт - тот вернет в виде json. Например https://api.vk.com/method/friends.search
2) дальше сервлет должен вытащить данные из json и сформировать на их основе выводимую страницу.

У меня вопрос только по первому пункту: с помощью какого метода можно войти на сайт и получить от него сразу ответ?
14 фев 19, 07:20    [21809055]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
artas
Member

Откуда: Киев сити
Сообщений: 1015
artur1234,

URLConnection ?
14 фев 19, 11:39    [21809250]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3176
Такой код примерно.

+

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.*;
import com.github.underscore.lodash.U;

public class HelloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setHeader("Content-Type", "text/javascript");
        resp.setHeader("Cache-Control", "no-cache, must-revalidate");
        resp.setHeader("Server", "Microsoft-IIS/10.0");
        resp.setCharacterEncoding("UTF-8");
        final String callback = req.getParameter("callback") == null ? "" : req.getParameter("callback");
        final String url = req.getParameter("url") == null ? "" : req.getParameter("url");
        StringBuilder builder = new StringBuilder();
        builder.append(callback).append("(\n");
        final Map<String, Object> json = new LinkedHashMap<>();
        json.put("server", "xml-json.herokuapp.com");
        json.put("remote_host", req.getRemoteAddr());
        json.put("url", url);
        final List<String> html = new ArrayList<>();
        try {
            U.FetchResponse response = U.fetch(url);
            if (response.getStatus() == 301) {
                response = U.fetch(response.getHeaderFields().get("Location").get(0));
            }
            if (response.getStatus() == 200) {
                html.add(response.text());
            } else {
                Map<String, Object> error = new LinkedHashMap<>();
                error.put("message", "Error " + response.getStatus() + " while loading url: " + url);
                html.add(url.endsWith("xml") ? U.toXml(error) : U.toJson(error));
            }
        } catch (Exception ex) {
            Map<String, Object> error = new LinkedHashMap<>();
            error.put("message", "Error " + ex.getMessage() + " while loading url: " + url);
            html.add(url.endsWith("xml") ? U.toXml(error) : U.toJson(error));
        }
        json.put("html", html);
        builder.append(U.toJson(json)).append("\n)");
        resp.setHeader("Content-Length", "" + builder.toString().getBytes().length);
        resp.getWriter().print(builder.toString());
    }

    public static void main(String[] args) throws Exception{
        Server server = new Server(Integer.valueOf(System.getenv("PORT")));
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        server.setHandler(context);
        context.addServlet(new ServletHolder(new HelloWorld()),"/*");
        server.start();
        server.join();   
    }
}



Хорошего Вам дня!
15 фев 19, 01:09    [21810104]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
andreykaT
Member

Откуда:
Сообщений: 2191
оо вот это код. аж прослезился. из музея скачали?
15 фев 19, 01:10    [21810105]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
забыл ник
Member

Откуда:
Сообщений: 2812
я тож не понял к чему он, адочек конечно. Понял, что давно не читал java-портянки, не жалею
15 фев 19, 01:19    [21810110]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 41006
Валентин по привычке рекламирует свой Underscore.

А это - шутка йумора.
resp.setHeader("Server", "Microsoft-IIS/10.0");
15 фев 19, 01:30    [21810112]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
andreykaT
Member

Откуда:
Сообщений: 2191
забыл ник
я тож не понял к чему он, адочек конечно. Понял, что давно не читал java-портянки, не жалею

уточнение "понял что давно не читал java-портянки 19-тилетней давности".
15 фев 19, 11:04    [21810326]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
andreykaT
Member

Откуда:
Сообщений: 2191
нормальный на джаве код можно писать. просто юзать надо инструментарий не того возраста в котором домой из армии возвращаются.
15 фев 19, 11:05    [21810328]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
mayton
Member

Откуда: loopback
Сообщений: 41006
Есть у меня тайное подозрение что данное решение будет выглядеть лучше на Node.JS.

И компактнее. И безо всяких "библиотек|.
15 фев 19, 11:07    [21810333]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
Partisan M
Member

Откуда:
Сообщений: 1356
mayton,

а у меня есть подозрение, что на вопрос о Java можно было бы и не отвечать туманным намёком на знание вами какой-то фигни, не относящейся к Java.
15 фев 19, 11:25    [21810376]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
Partisan M
Member

Откуда:
Сообщений: 1356
Valentin Kolesnikov,
resp.setHeader("Content-Type", "text/javascript");
resp.setHeader("Cache-Control", "no-cache, must-revalidate");
resp.setHeader("Server", "Microsoft-IIS/10.0");


Заголовок Content-Type должен быть "application/json".
Остальные заголовки в примере могут отличаться.
15 фев 19, 11:28    [21810380]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5183
artur1234,

1. spring web
2 проверить, что подтянулся MappingJackson2HttpMessageConverter

RestTemplate restTemplate = new RestTemplate();
R r =  restTemplate.getForEntity(<...>)
15 фев 19, 11:28    [21810382]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3176
Partisan M
Valentin Kolesnikov,
resp.setHeader("Content-Type", "text/javascript");
resp.setHeader("Cache-Control", "no-cache, must-revalidate");
resp.setHeader("Server", "Microsoft-IIS/10.0");


Заголовок Content-Type должен быть "application/json".
Остальные заголовки в примере могут отличаться.


Для этой программы мне нужен был именно JavaScript тип.

Хорошего Вам дня!
15 фев 19, 20:28    [21811218]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
andreykaT
Member

Откуда:
Сообщений: 2191
mayton
Есть у меня тайное подозрение что данное решение будет выглядеть лучше на Node.JS.

И компактнее. И безо всяких "библиотек|.

у ноды просто эти потршки чуть поглубже спрятаны.
15 фев 19, 21:39    [21811250]     Ответить | Цитировать Сообщить модератору
 Re: Как на java запустить сайт и обработать ответ.  [new]
artur1234
Member

Откуда:
Сообщений: 17
про urlconnection - не совсем подходит. Он возвращает полностью страницу. А если в контакте не зарегистрирован то должна появится страница авторизации где пользователь авторизируется а потом уже после авторизации файл в формате Json - если бы не не страница авторизации то urlconnection полностью подходит. А так он возвращает страницу авторизации в html виде. Но я эту проблему решил обработку метода https://oauth.vk.com/authorize? - я переправляю переправляю на отдельный сервлет с помощью параметра redirect_uri.
Ну а все другие методы из api вк можно вызывать с помощью url connection.

Всем спасибо еще увидимся.
18 фев 19, 04:36    [21812469]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить