Выполнение HTTP-запроса
При выполнении HTTP-запроса GET параметры (имена и значения) запроса передаются как часть URL. С передачей параметров таким способом связаны некоторые ограничения. В частности, длина URL не должна превышать 2048 символов. Если требуется отправить больший объем данных, необходимо использовать HTTP-запрос POST. Метод POST является более гибким и обеспечивает передачу параметров как часть тела запроса.
Чтобы выполнить HTTP-запрос POST с помощью HttpClient, необходимо вызвать метод execute () класса HttpClient, передав ему экземпляр HttpPost. Обычно в виде части HTTP-запроса POST передаются URL-закодированные параметры “имя/значе- ние” формы. Чтобы сделать это посредством HttpClient, понадобится создать список, содержащий экземпляры объектов NameValuePair, и затем поместить этот список в объект UrlEncodedFormEntity. Объект NameValuePair является оболочкой для комбинации “имя/значение”, а классу UrlEncodedFormEntity известно, как закодировать список объектов NameValuePair, подходящий для HTTP-запросов (обычно типа POST). После создания UrlEncodedFormEntity можно установить тип сущности HttpPost в UrlEncodedFormEntity и выполнить запрос.
В е 15.3 создается HttpClient, а затем — экземпляр HttpPost с URL конечной точки HTTP. Далее создается список объектов NameValuePair, который заполняется множеством параметров “имя/значение”. После этого создается экземпляр класса UrlEncodedFormEntity с передачей его конструктору списка объектов NameValuePair. Наконец, вызывается метод setEntity() запроса POST и запрос выполняется с использованием экземпляра HttpClient.
В действительности HTTP-запрос POST обладает намного большими возможностями, чем продемонстрировано в коде. С помощью HTTP-запроса POST можно передавать простые параметры “имя/значение”, как показано в е 15.3, а также сложные параметры наподобие файлов. HTTP-запрос POST поддерживает другой формат тела запроса, который называется многоэлементным запросом POST. Благодаря такому типу запроса POST, параметры “имя/значение” можно отправлять, как и ранее, но только вместе с произвольными файлами. К сожалению, версия класса HttpClient, поставляемая в составе Android, не поддерживает напрямую многоэлементные запросы POST. Чтобы выполнять такие запросы, понадобится получить три дополнительных проекта Apache с открытым исходным кодом: Apache Commons IO, Mime4j и HttpMime. Эти проекты доступны для загрузки на перечисленных ниже веб-сайтах:
• Commons IO: http://commons.apache.org/io/
• Mime4j: http://james.apache.org/mime4j/
• HttpMime: http://hc.apache.org/downloads.cgi (внутри HttpClient)
На заметку! В примере с многоэлементным запросом задействовано несколько файлов .jar, которые не входят в состав исполняющей среды Android. Чтобы обеспечить упаковку этих файлов .jar в виде части файла .apk, необходимо добавить их как внешние файлы .jar в Eclipse. Для этого щелкните правой кнопкой мыши на проекте в Eclipse, выберите в контекстном меню пункт Properties (Свойства), затем Java Build Path (Путь сборки Java), перейдите на вкладку Libraries (Библиотеки) и выберите Add External JARs (Добавить внешние JAR-файлы). После этого необходимые файлы .jar будут доступны как во время компиляции, так и во время выполнения.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.