Вы находитесь на странице: 1из 7

Министерство просвещения Республики Молдова Технический Университет Молдовы Факультет вычислительной техники информатики и микроэлектроники

Департамент разработки программного обеспечения и Автоматики

Отчёт

PAM

Лабораторная работа №3

Тема: Простой HTTP клиент

Выполнил ст.гр. TI-154:

Проверил:

Кишинёв-2017

Бежан Николай Русу Кристиан

Цель работы

Реализация программной эмуляции веб-сервиса бесплатных СМС сообщений Orange

Задание:

- Сервис будет эмулирован, используя методы протокола HTTP (GET, POST);

- Интерфейс приложения должен соответствовать стилю выбранного сервиса;

- Решение минимум трех исключений, определенных выбранным веб сервисом.

Теоретические сведения

HTTP (HyperText Transfer Protocol) — протокол передачи данных в виде документов разметки в формате «HTML». Основой HTTP является технология «клиент-сервер», то есть предполагается существование:

- Клиентов, которые инициируют соединение и посылают запрос;

- Серверов, которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно сообщение с результатом.

Клиенты:

Первоначально, протокол HTTP разрабатывался для доступа к гипертекстовым документам Всемирной паутины. Поэтому основными реализациями клиентов являются браузеры (агенты пользователя).

Серверы:

Основные реализации: Apache, IIS, Google Web Server. Структурно, каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном порядке:

1. Стартовая строка (Starting line) — определяет тип сообщения;

2. Заголовки (Headers) — характеризуют тело сообщения, параметры передачи и прочие

сведения;

3. Тело сообщения (Message Body) — непосредственно данные сообщения. Обязательно

должно отделяться от заголовков пустой строкой.

Метод HTTP (HTTP Method) — последовательность из любых символов, кроме управляющих и разделителей, указывающая на основную операцию над ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. GET используется для запроса содержимого указанного ресурса. С помощью метода GET можно также начать какой-либо процесс. POST применяется для передачи пользовательских данных заданному ресурсу.

Ход работы

Разработка приложения проводилась в среде Android Studio с использованием устройства Samsung Galaxy S5. Результатом данной лабораторной работы является мобильное приложение Android эмулирующего работу сервиса по передаче бесплатных сообщений.

передаче бесплатных сообщений . class ConnectGetTask extends AsyncTask<Void , Bitmap

class ConnectGetTask extends AsyncTask<Void, Bitmap, Void> {

String urls = "http://www.moldcell.md/"; Bitmap bitmap = null; String src;

/* 1. onPreExecute(), invoked on the UI thread before the task is executed. This step is normally used to setup the task, for instance by showing a progress bar in the user interface. */

@Override protected void onPreExecute() { super.onPreExecute();

}

/*

2.

doInBackground(Params

),

invoked on the background thread

immediately after onPreExecute() finishes executing. This step is

used to perform background computation that can take a long time. The parameters of the asynchronous task are passed to this step. The result of the computation must be returned by this step and will be passed back to the last step. This step can also use

publishProgress(Progress

These values are published on the UI thread, in the

step.

onProgressUpdate(Progress

)

to publish one or more units of progress.

)

*/

@Override protected Void doInBackground(Void

params) {

String input = ""; try { //adress of the page with sms url = new URL(urls + "sendsms"); urlConnection = (HttpURLConnection) url.openConnection(); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); input = readStream(in); urlConnection.disconnect(); }catch (Exception e){ e.getStackTrace();

}

try { captcha_sid = input.substring(input.indexOf("input type=\"hidden\" name=\"captcha_sid\" value=\"")+46,input.indexOf("input type=\"hidden\" name=\"captcha_sid\" value=\"")+46+8); captcha_token = input.substring(input.indexOf("input type=\"hidden\" name=\"captcha_token\" value=\"")+48,input.indexOf("input type=\"hidden\" name=\"captcha_token\" value=\"")+48+32); form_build_id = input.substring(input.indexOf("input type=\"hidden\" name=\"form_build_id\" value=\"")+48,input.indexOf("input type=\"hidden\" name=\"form_build_id\" value=\"")+48+48); Log.d("captcha_sid:", captcha_sid); Log.d("captcha_token:", captcha_token); Log.d("form_build_id:", form_build_id);

//adress of captcha int index = input.indexOf("/rom/private/image_captcha?sid"); src = input.substring(index, index + 61); Log.d("Image", src); URL urlPic = new URL(urls + src); URLConnection conn = urlPic.openConnection(); bitmap = BitmapFactory.decodeStream(conn.getInputStream()); } catch (Exception e) { e.getStackTrace();

}

publishProgress(bitmap); return null;

}

/*

3.

onProgressUpdate(Progress

),

invoked on the UI thread after

a call to publishProgress(Progress

is undefined. This method is used to display any form of progress in the user interface while the background computation is still executing. For instance, it can be used to animate a progress bar

).

The timing of the execution

or show logs in a text field. */

@Override protected void onProgressUpdate(Bitmap super.onProgressUpdate(values);

values) {

Image.setImageBitmap(values[0]);

}

/* 4. onPostExecute(Result), invoked on the UI thread after the background computation finishes. The result of the background computation is passed to this step as a parameter. */

@Override protected void onPostExecute(Void result) { super.onPostExecute(result);

}

}

POST применяется для передачи пользовательских данных заданному ресурсу.

class PostTask extends AsyncTask<String, String, Void>{

protected Void doInBackground(String

params) {

try { urlConnection = (HttpURLConnection) url.openConnection();

urlConnection.setReadTimeout(10000);

urlConnection.setConnectTimeout(15000);

urlConnection.setRequestMethod("POST");

urlConnection.setDoInput(true);

urlConnection.setDoOutput(true);

Uri.Builder builder = new Uri.Builder() .appendQueryParameter("phone", params[0]) .appendQueryParameter("name", params[1]) .appendQueryParameter("message", params[2]) .appendQueryParameter("conditions", "on") .appendQueryParameter("captcha_sid", params[3]) .appendQueryParameter("captcha_token", params[4]) .appendQueryParameter("captcha_response", params[5]) .appendQueryParameter("op", "") .appendQueryParameter("form_build_id", params[6]) .appendQueryParameter("form_id", "websms_main_form");

String query = builder.build().getEncodedQuery(); OutputStream os = urlConnection.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,

"UTF-8"));

writer.write(query); writer.flush(); writer.close(); os.close(); urlConnection.connect(); String url1 = urlConnection.getURL().toString(); int responseCode = urlConnection.getResponseCode(); String url2 = urlConnection.getURL().toString(); String mesg = ""; if (!url1.equals(url2)){ mesg = "Ваше сообщение было успешно отправлено!"; }else{ mesg = "Сообщение не было отправлено, попробуйте позже!!";

}

publishProgress(mesg); System.out.println("POST Response Code: " + responseCode); String input = ""; InputStream in = new BufferedInputStream(urlConnection.getInputStream()); input = readStream(in); Log.d("Response",input);

}catch (Exception e){ e.getStackTrace();

}

return null;

}

protected void onProgressUpdate(String

values) {

super.onProgressUpdate(values); Toast.makeText(MainActivity.this, values[0], Toast.LENGTH_LONG).show();

}

protected void onPostExecute(Void result) { super.onPostExecute(result); Captcha.setText(""); getTask = new ConnectGetTask(); getTask.execute();

}

}

Вывод В данной лабораторной работе мы разработали приложение Android. Forms типа органайзер. В результате выполнения работы, было разработано приложение со следующим функционалом:

- добавление/удаление/изменение записей задач

- уведомление о задаче с использованием службы переднего плана

- просмотр списка для каждого дня и поиск среди записей

Для выполнения работы использовался язык программирования Java в среде разработки Android Studio.