HttpClient 4.x (Tutorial) / HttpClient 4.x (Учебник): 1. Fundamentals (Основы)
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Глава 1. Основы gi1gi 25.11.10 в 13:27 |
|
|
1.1. Выполнение запроса gi1gi 25.11.10 в 13:28 |
||
|
Наиболее важной функцией HttpClient является выполнение HTTP-методов. Выполнение HTTP-метода включает в себя один или несколько обменов HTTP-запросов/HTTP-ответ, как правило, обрабатываемых внутри HttpClient. Пользователь, как ожидается, предоставляет объект запроса на выполнение экземплязу HttpClient, который, в свою очередь, передает запрос на целевой сервер и возвращает соответствующий объект ответа, или выбрасывает исключение, если выполнение не удалось. gi1gi 01.12.10 в 15:34 |
||
|
Вполне естественно, что основной точкой входа в HttpClient API является интерфейс HttpClient, который определяет акт, описанный выше. gi1gi 01.12.10 в 15:38 |
||
|
Вот пример процесса выполнения запроса в своей простейшей форме: gi1gi 01.12.10 в 15:40 |
||
|
HttpClient httpclient = new DefaultHttpClient(); gi1gi 25.11.10 в 13:28 |
||
|
1.1.1. HTTP-запрос gi1gi 25.11.10 в 13:28 |
||
|
Все HTTP запросы имеют строку запроса, состоящую из имени метода, запрашиваемого URI и версии HTTP протокола. gi1gi 25.11.10 в 13:30 |
||
|
HttpClient поддерживает все HTTP-методы, определенные в спецификации HTTP/1.1: GET, HEAD, POST, PUT, DELETE, TRACE и OPTIONS. Существует специальный класс для каждого типа метода: HttpGet, HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, и HttpOptions. gi1gi 01.12.10 в 15:46 |
||
|
Request-URI - это Универсальным Идентификатором Ресурса, который идентифицирует ресурс, к которому обращен запрос. URI HTTP-запроса состоит из схемы протокола, имени хоста, дополнительно порта, пути к ресурсу, дополнительно запроса, и дополнительный фрагмента. gi1gi 25.11.10 в 13:31 |
||
|
HttpGet httpget = new HttpGet( "http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq="); gi1gi 25.11.10 в 13:33 |
||
|
HttpClient предоставляет ряд полезных методов для упрощения создания и модификации запрашиваемых URI. gi1gi 25.11.10 в 13:33 |
||
|
URI может быть составлен програмно: gi1gi 25.11.10 в 13:33 |
||
|
URI uri = URIUtils.createURI("http", "www.google.com", -1, "/search", "q=httpclient&btnG=Google+Search&aq=f&oq=", null); gi1gi 25.11.10 в 13:34 |
||
|
stdout > gi1gi 25.11.10 в 13:34 |
||
|
http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq= gi1gi 25.11.10 в 13:34 |
||
|
Строка запроса также может быть создана из индивидуальных параметров: gi1gi 25.11.10 в 13:34 |
||
|
List<namevaluepair> qparams = new ArrayList<namevaluepair>(); gi1gi 25.11.10 в 13:38 |
||
|
stdout > gi1gi 25.11.10 в 13:37 |
||
|
http://www.google.com/search?q=httpclient&btnG=Google+Search&aq=f&oq= gi1gi 25.11.10 в 13:38 |
||
|
1.1.2. HTTP-ответ gi1gi 25.11.10 в 13:35 |
||
|
HTTP ответ - это сообщение, отправленное сервером клиенту после получения и интерпретации сообщения запроса. Первая строка этого сообщения состоит из версии протокола, за которой следует цифровой код статуса и связанная с ним текстовая фраза. gi1gi 25.11.10 в 13:38 |
||
|
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); gi1gi 25.11.10 в 13:38 |
||
|
System.out.println(response.getProtocolVersion()); gi1gi 25.11.10 в 13:38 |
||
|
stdout > gi1gi 25.11.10 в 13:37 |
||
|
HTTP/1.1 gi1gi 25.11.10 в 13:39 |
||
|
1.1.3. Заголовки HTTP-сообщения gi1gi 25.11.10 в 13:40 |
||
|
HTTP сообщение может содержать ряд заголовков, описывающих свойства сообщения, такие как размер контента, тип содержания, и т.д. HttpClient предоставляет методы для извлечения, добавления, удаления и перечисления заголовков. gi1gi 25.11.10 в 13:41 |
||
|
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); gi1gi 25.11.10 в 13:42 |
||
|
stdout > gi1gi 25.11.10 в 13:37 |
||
|
Set-Cookie: c1=a; path=/; domain=localhost Set-Cookie: c2=b; path="/", c3=c; domain="localhost" 2 gi1gi 25.11.10 в 13:42 |
||
|
Наиболее эффективным способ получить все заголовки конкретного типа - использование интерфейса HeaderIterator. gi1gi 25.11.10 в 13:44 |
||
|
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); gi1gi 25.11.10 в 13:45 |
||
|
HeaderIterator it = response.headerIterator("Set-Cookie"); gi1gi 25.11.10 в 13:45 |
||
|
while (it.hasNext()) gi1gi 25.11.10 в 13:45 |
||
|
stdout > gi1gi 25.11.10 в 13:37 |
||
|
Set-Cookie: c1=a; path=/; domain=localhost Set-Cookie: c2=b; path="/", c3=c; domain="localhost" gi1gi 25.11.10 в 13:47 |
||
|
Он также предоставляет удобные методы для разбора HTTP-сообщений на отдельных элементы заголовка. gi1gi 25.11.10 в 13:46 |
||
|
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK"); response.addHeader("Set-Cookie", "c1=a; path=/; domain=localhost"); response.addHeader("Set-Cookie", "c2=b; path=\"/\", c3=c; domain=\"localhost\""); gi1gi 25.11.10 в 13:47 |
||
|
HeaderElementIterator it = new BasicHeaderElementIterator( response.headerIterator("Set-Cookie")); gi1gi 25.11.10 в 13:48 |
||
|
while (it.hasNext()) gi1gi 25.11.10 в 13:48 |
||
|
stdout > gi1gi 25.11.10 в 13:37 |
||
|
c1 = a path=/ domain=localhost c2 = b path=/ c3 = c domain=localhost gi1gi 25.11.10 в 13:49 |
||
|
1.1.4. HTTP-объект gi1gi 25.11.10 в 13:52 |
||
|
HTTP сообщения могут передавать объекты содержания, ассоциированные с запросом или ответом. Объекты содержатся не во всех запросах и ответах, так как являются не обязательными. Запросы, использующие объекты, называются запросами, включающими объекты (entity enclosing requests). Спецификация HTTP определяет два методы для работы с включенными объектами: POST и PUT. Ответы, как правило, включают объект содержания. Однако, из этого правила есть исключения, напримет ответы на HEAD-метод и 204 No Content, 304 Not Modified, 205 Reset Content responses. gi1gi 25.11.10 в 13:52 |
||
|
HttpClient выделяет три вида объектов, в зависимости от того, откуда получено содержание: gi1gi 25.11.10 в 14:07 |
||
|
Потоковые объекты: Содержание, полученно из потока, либо сгенерировано на лету. В частности, к этой категории относятся объекты, полученные из HTTP-ответов. Поточные объекты, как правило, не являются повторяемыми. gi1gi 25.11.10 в 14:08 |
||
|
Автономные объекты: Содержание, находится в памяти или полученно независимо от соединения или других объектов. Автономные объекты, как правило, являются повторяемыми. Этот тип объектов в основном используется для объектов, входящих в HTTP-запросы. gi1gi 25.11.10 в 14:11 |
||
|
Объекты – оболочки: Содержание, полученно из других объектов. gi1gi 25.11.10 в 14:11 |
||
|
Это различие имеет важное значение для управления соединениями, когда содержимое HTTP-ответов передается в виде потока. Для объектов HTTP-запросов, которые создаются приложением и лишь отправляются с помощью экземпляра HttpClient, разница между потоковыми и автономными объектами не имеет большого значения. В этом случае, предлагается рассмотривать неповторяющиеся объекты как потоковые, а повторяющиеся - как автономные. gi1gi 25.11.10 в 14:23 |
