загрузка...
загрузка...
загрузка...

Детализация по запросу

загрузка...
загрузка...

Блог о пеленгации

Тема поста:

Работа с сетью из мидлета средствами JavaMe

1. Отправка GET запроса на сервер. Java:
//GetRequest = "http://www.websource.ru/index.php?par1=val1&...&parN=valN"  
 public static String ReqServerFromClient(String GetRequest) {  
   String answer = "";  
   HttpConnection hConnect = null;  
   InputStream ReadData = null;  
   try {  
       hConnect = (HttpConnection) Connector.open(GetRequest, Connector.READ_WRITE, true);  
       //устанавливаем тип и свойства запроса на сервер  
       hConnect.setRequestMethod(HttpConnection.GET);  
       hConnect.setRequestProperty("Connection", "close");  
       hConnect.setRequestProperty("User-Agent", "Connect (MIDP-2.0: J2ME)");  
       hConnect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
       hConnect.setRequestProperty("Accept", "text/plain");  
       //смотрим ответ сервера  
       if (hConnect.getResponseCode() == HttpConnection.HTTP_OK) {  
         ReadData = hConnect.openInputStream();  
         short ch = 4096;  
         int len = 0;  
         byte[] buff = new byte[ch];  
         do {  
           len = ReadData.read(buff);  
           if (len > 0) {  
              answer += new String(buff, 0, len);  
              }  
            } while (len > 0);  
         } else {  
           answer = //Ответ сервера не 200 //Код ответа здесь - hConnect.getResponseCode();  
         }  
       } catch (ConnectionNotFoundException cne) {  
         answer = //Нет доступа к серверу //Здесь сообщение об ошибке - cne.getMessage();  
       } catch (ClassCastException e) {  
         answer = //Не корректный запрос к серверу //Здесь сообщение об ошибке - e.getMessage());  
       } catch (IOException ioe) {  
         answer = //Ошибка при соединении с сервером //Здесь сообщение об ошибке - ioe.getMessage());  
       } catch (SecurityException e) {  
         answer = //Сетевой запрос отменен пользователем!  
       } catch (Exception a) {  
         answer = //Ошибка приложения //Здесь сообщение об ошибке - a.getMessage());  
       } finally {  
         try {  
           ReadData.close();  
           ReadData = null;  
         } catch (Exception a) {  
         }  
         try {  
           hConnect.close();  
           hConnect = null;  
         } catch (Exception a) {  
         }  
       }  
     return answer;  
   }  
О коде
Сам код достаточно документирован), так что пара моментов тезисно:
  1. Данная функция желательно должна быть помещена в поток (Runnable) тк понятно, что процесс её выполнения не быстрый)
  2. hConnect.setRequestProperty можно использовать для установки своих полей в хедере запроса на сервер, к примеру:
    hConnect.setRequestProperty("MHEAD", "VALUEHEAD1");
    Тогда на стороне сервера если это php, то в массиве $_SERVER по ассоциативному ключу 'HTTP_MHEAD' ($_SERVER['HTTP_MHEAD']) будет находится значение 'VALUEHEAD1'
  3. С учетом того, что как правило или как закономерность телефоны не достаточно хорошо держат сигнал (опять какая-то низменность или в подьезде или что-то в этом роде), можно добавить запросы-попытки на сервер и после стольки то неудачных попыток - говорить пользователю, что сервер недоступен. Причину скидывания соединения и начала нового (то есть реконнект) придумайте сами - она очевидна судя по комментариям в исходниках GET запроса)
2. Отправка POST запроса на сервер.
//UrlServ = "http://www.websource.ru/index.php"
//PostData = "par1=val1&...&parN=valN"  
 public static String ReqServerFromClient(String UrlServ, String PostData) {  
   String answer = "";  
   HttpConnection hConnect = null;  
   InputStream ReadData = null;  
   OutputStream sendData = null;
   try {  
       hConnect = (HttpConnection) Connector.open(UrlServ, Connector.READ_WRITE, true);  
       //устанавливаем тип и свойства запроса на сервер  
       hConnect.setRequestMethod(HttpConnection.POST);  
       hConnect.setRequestProperty("Connection", "close");  
       hConnect.setRequestProperty("User-Agent", "Connect (MIDP-2.0: J2ME)");  
       hConnect.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
       hConnect.setRequestProperty("Accept", "text/plain");  
       //отправка POST данных
       sendData = hConnect.openOutputStream();
       sendData.write(PostData.getBytes());
       //смотрим ответ сервера  
       if (hConnect.getResponseCode() == HttpConnection.HTTP_OK) {  
         ReadData = hConnect.openInputStream();  
         short ch = 4096;  
         int len = 0;  
         byte[] buff = new byte[ch];  
         do {  
           len = ReadData.read(buff);  
           if (len > 0) {  
              answer += new String(buff, 0, len);  
              }  
            } while (len > 0);  
         } else {  
           answer = //Ответ сервера не 200 //Код ответа здесь - hConnect.getResponseCode();  
         }  
       } catch (ConnectionNotFoundException cne) {  
         answer = //Нет доступа к серверу //Здесь сообщение об ошибке - cne.getMessage();  
       } catch (ClassCastException e) {  
         answer = //Не корректный запрос к серверу //Здесь сообщение об ошибке - e.getMessage());  
       } catch (IOException ioe) {  
         answer = //Ошибка при соединении с сервером //Здесь сообщение об ошибке - ioe.getMessage());  
       } catch (SecurityException e) {  
         answer = //Сетевой запрос отменен пользователем!  
       } catch (Exception a) {  
         answer = //Ошибка приложения //Здесь сообщение об ошибке - a.getMessage());  
       } finally { 
	   try {
           sendData.close();
           sendData = null;
        } catch (Exception a) {
        }	   
         try {  
           ReadData.close();  
           ReadData = null;  
         } catch (Exception a) {  
         }  
         try {  
           hConnect.close();  
           hConnect = null;  
         } catch (Exception a) {  
         }  
       }  
     return answer;  
   }  
Комментарий к коду.
Как видим запрос POST мало чем отличается от GET.
  1. Указание другого типа запроса:
     hConnect.setRequestMethod(HttpConnection.POST);
  2. Запись POST данных:
     sendData = hConnect.openOutputStream();
     sendData.write(PostData.getBytes());
Небольшое замечание по показанным примерам отправки данных на сервер.
  1. При отправке запросов по правилам нужно указывать еще одно поле в заголовке:
     hConnect.setRequestProperty("Content-Length", BodyLen);   
    
    Но можете не указывать))
  2. При создании своих имен в заголовках имейте в виду, что для некоторых моделей телефонов nokia, а следовательно чтобы не гадать сразу делайте так - название своего самопального параметра начинайте с X-.... Все подробности по данной теме смотрите на официальном сайте нокия для разработчиков.
Вставить карту яндекс на сайт

Работа с сетью из мидлета средствами JavaMe

Использование библиотеки Bouncy Castle в JavaMe (Часть 1)

Использование библиотеки Bouncy Castle в JavaMe (Часть 2)

Запись звонков

Найти человека по номеру телефона

Файловая система Android

Запись звука на Android

Локация в JavaCard

Философия прослушки

MBLOC.RU
Copyright © MBLOC.RU Все права защищены от взлома и подделки данного сайта. Распространение информации без разрешения владельца данного сайта запрещается и карается всей строгостью закона.