Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Java, Обработка HTTP запросов, приходящих на Android

#java #android #http


Пишу приложение для Android, нужно принять и обработать http запрос.

Скачала с apache.org пакеты .jar положила в папку libs проекта, IDE видит библиотеки
apache но я не знаю с какой стороны к ним подступиться, я разобралась как отправлять
запросы из приложения, а вот как в этом же приложении принимать запросы никак не могу
догадаться, и ведь тут наверно надо запускать много потоков что бы они слушали соединения,
вдруг будет сразу несколько запросов.

Подозреваю что из всех пакетов мне нужен org.apache.http, но в папке несколько файлов:

commons-codec-1.9.jar
commons-logging-1.2.jar
fluent-hc-4.5.1.jar
httpclient-4.5.1.jar
httpclient-cache-4.5.1.jar
httpclient-win-4.5.1.jar
httpcore-4.4.3.jar
httpmime-4.5.1.jar
jna-4.1.0.jar
jna-platform-4.1.0.jar


Если подключить их все, возникает конфликт.
Какой из этих файлов нужен что бы обрабатывать http запрос и как это реализовать?
Или сколько потоков нужно сразу запускать?
    


Ответы

Ответ 1



На английском SO рекомендуют этот проект https://github.com/NanoHttpd/nanohttpd Написал небольшой проект с использованием этой библиотеки, весь проект можно посмотреть тут: https://github.com/ASEgorov/HttpServerExample Основные моменты: Создается новый класс как наследник от NanoHTTPD public class Server extends NanoHTTPD { private static final String LOG_TAG = "MyServer"; private String parameter; public Server(int port) throws IOException { super(port); start(); Log.i(LOG_TAG, "Server started"); } @Override public Response serve(IHTTPSession session) { Log.i(LOG_TAG, "Receive query"); String msg = "

Hello server

\n"; msg += "

Hello, " + parameter + "!

"; return new Response( msg + "\n" ); } public void setParameter(String parameter) { this.parameter = parameter; } } Инициализируете этот сервер, например при старте Activity: try { mServer = new Server(8080); } catch (IOException e) { Log.e(LOG_TAG, "Can't start server", e); } Я передавал данные в этот сервер по кнопке (чтобы проверить что ответ от сервера изменяется): @Override public void onClick(View v) { TextView param = (TextView) findViewById(R.id.someData); mServer.setParameter(param.getText().toString()); } Для того чтобы это все работало нужно добавить в Gradle соответствующую библиотеку compile 'com.nanohttpd:nanohttpd:2.1.1' и разрешение в манифест

Комментариев нет:

Отправить комментарий