HttpURLConnection Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
URLConnection с поддержкой функций, зависящих от HTTP.
[Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)]
public abstract class HttpURLConnection : Java.Net.URLConnection
[<Android.Runtime.Register("java/net/HttpURLConnection", DoNotGenerateAcw=true)>]
type HttpURLConnection = class
inherit URLConnection
- Наследование
- Производный
- Атрибуты
Комментарии
URLConnection с поддержкой функций, относящихся к HTTP. Дополнительные сведения см. в спецификации .
Использование этого класса соответствует шаблону: <ol<>li>Получить новый HttpURLConnection
путем вызова URL#openConnection() URL.openConnection()
и приведения результата к HttpURLConnection
. <Li>Подготовьте запрос. Основным свойством запроса является его универсальный код ресурса (URI). Заголовки запросов также могут содержать метаданные, такие как учетные данные, предпочтительные типы контента и файлы cookie сеанса. <Li>При необходимости отправьте текст запроса. Экземпляры должны быть настроены с #setDoOutput(boolean) setDoOutput(true)
, если они содержат текст запроса. Передача данных путем записи в поток, возвращаемый .#getOutputStream()
<Li>Прочитать ответ. Заголовки ответов обычно содержат метаданные, такие как тип и длина содержимого текста ответа, измененные даты и файлы cookie сеанса. Текст ответа может быть считан из потока, возвращаемого .#getInputStream()
Если в ответе нет текста, этот метод возвращает пустой поток. <li>Отключить. После считывания текста ответа следует закрыть , HttpURLConnection
вызвав .#disconnect()
Отключение освобождает ресурсы, удерживаемые подключением, чтобы их можно было закрыть или повторно использовать. </Пр>
Например, чтобы получить веб-страницу по адресу http://www.android.com/
:
{@code
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
} finally {
urlConnection.disconnect();
}
}
<h3>Secure Communication with HTTPS</h3> Calling URL#openConnection()
on a URL with the "https" scheme will return an HttpsURLConnection
, который позволяет переопределить значения по умолчанию javax.net.ssl.HostnameVerifier HostnameVerifier
и javax.net.ssl.SSLSocketFactory SSLSocketFactory
. Предоставленное SSLSocketFactory
приложение, созданное javax.net.ssl.SSLContext SSLContext
на основе , может предоставлять пользовательский javax.net.ssl.X509TrustManager X509TrustManager
для проверки цепочек сертификатов и настраиваемый javax.net.ssl.X509KeyManager X509KeyManager
для предоставления сертификатов клиента. Дополнительные сведения см. в статье javax.net.ssl.HttpsURLConnection HttpsURLConnection
.
<h3 Обработка< ответов>/h3>HttpURLConnection
будет следовать до пяти перенаправлений HTTP. Он будет следовать перенаправления с одного сервера-источника на другой. Эта реализация не следует перенаправлениям с HTTPS на HTTP или наоборот.
Если HTTP-ответ указывает, что произошла ошибка, #getInputStream()
вызовет исключение IOException
. Используйте #getErrorStream()
для чтения ответа об ошибке. Заголовки можно считывать обычным способом с помощью #getHeaderFields()
,
<h3>Публикация содержимого</h3 Для отправки> данных на веб-сервер настройте подключение для вывода с помощью #setDoOutput(boolean) setDoOutput(true)
.
Для достижения оптимальной производительности следует вызывать , #setFixedLengthStreamingMode(int)
если длина тела известна заранее, или #setChunkedStreamingMode(int)
когда она не указана. В противном случае HttpURLConnection
будет принудительно буферизуть весь текст запроса в памяти перед его передачей, тратя (и, возможно, изнурительной) кучу и увеличивая задержку.
Например, чтобы выполнить отправку:
{@code
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
writeStream(out);
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
} finally {
urlConnection.disconnect();
}
}
<h3>Performance</h3> Входные и выходные потоки, возвращаемые этим классом, не являются <сильными>, не буферизованной< или строгой>. Большинство вызывающих должны упаковывать возвращаемые потоки в оболочку с java.io.BufferedInputStream BufferedInputStream
помощью или java.io.BufferedOutputStream BufferedOutputStream
. Вызывающие методы, которые выполняют только массовые операции чтения или записи, могут пропускать буферизацию.
При передаче больших объемов данных на сервер или с сервера используйте потоки, чтобы ограничить объем данных в памяти одновременно. Если вам не нужно, чтобы весь текст был в памяти одновременно, обработайте его как поток (вместо хранения всего текста в виде одного массива байтов или строки).
Чтобы уменьшить задержку, этот класс может повторно использовать одну и ту же базовую Socket
для нескольких пар "запрос-ответ". В результате HTTP-подключения могут быть открыты дольше, чем это необходимо. Вызовы могут возвращать #disconnect()
сокет в пул подключенных сокетов.
По умолчанию эта реализация HttpURLConnection
запросов к серверам использует сжатие gzip и автоматически распаковывает данные для вызывающих #getInputStream()
объектов . В этом случае заголовки ответов Content-Encoding и Content-Length очищаются. Сжатие Gzip можно отключить, задав допустимые кодировки в заголовке запроса:
{@code
urlConnection.setRequestProperty("Accept-Encoding", "identity");
}
Задание заголовка запроса Accept-Encoding явно отключает автоматическую распаковку и оставляет заголовки ответов без изменений; Вызывающие должны обрабатывать распаковку по мере необходимости в соответствии с заголовком Content-Encoding ответа.
#getContentLength()
возвращает число переданных байтов и не может использоваться для прогнозирования количества байтов, из #getInputStream()
которых можно считывать сжатые потоки. Вместо этого считывает этот поток до тех пор, пока он не будет исчерпан, т. е. когда InputStream#read
возвращает значение -1.
<h3>Обработка сетевого< входа/h3> Некоторые Wi-Fi сети блокируют доступ к Интернету, пока пользователь не перейдет на страницу входа. Такие страницы входа обычно отображаются с помощью перенаправлений HTTP. Вы можете использовать для #getURL()
проверки неожиданного перенаправления подключения. Эта проверка недопустима, пока <не будут получены заголовки ответа strong>после< или strong>, которые можно активировать, вызвав #getHeaderFields()
или #getInputStream()
. Например, чтобы проверка, что ответ не был перенаправлен на непредвиденный узел:
{@code
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
if (!url.getHost().equals(urlConnection.getURL().getHost())) {
// we were redirected! Kick the user out to the browser to sign on?
}
...
} finally {
urlConnection.disconnect();
}
}
<h3>HTTP Authentication</h3>HttpURLConnection
поддерживает обычную проверку подлинности HTTP. Используйте Authenticator
, чтобы задать обработчик проверки подлинности на уровне виртуальной машины:
{@code
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password.toCharArray());
}
});
}
Если он не связан с HTTPS, это <надежный>не</надежный> безопасный механизм проверки подлинности пользователей. В частности, имя пользователя, пароль, запрос и ответ передаются по сети без шифрования.
<h3>Сеансы с файлами cookie</h3> Для установления и обслуживания потенциально длительного сеанса между клиентом и сервером включает HttpURLConnection
расширяемый диспетчер файлов cookie. Включите управление файлами cookie на уровне виртуальной машины с помощью CookieHandler
и CookieManager
:
{@code
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
}
По умолчанию CookieManager
принимает файлы cookie только с сервера-источника . Включены две другие политики: CookiePolicy#ACCEPT_ALL
и CookiePolicy#ACCEPT_NONE
. Реализуйте CookiePolicy
для определения настраиваемой политики.
По умолчанию CookieManager
все принятые файлы cookie сохраняются в памяти. Эти файлы cookie будут забыты при выходе виртуальной машины. Реализуйте CookieStore
для определения пользовательского хранилища файлов cookie.
Помимо файлов cookie, заданных HTTP-ответами, вы можете настроить файлы cookie программным способом. Для включения в заголовки HTTP-запросов файлы cookie должны иметь свойства домена и пути.
По умолчанию новые экземпляры HttpCookie
работают только с серверами, поддерживающими файлы cookie RFC 2965 . Многие веб-серверы поддерживают только более старую спецификацию RFC 2109. Для совместимости с большинством веб-серверов установите для файла cookie версию 0.
Например, для получения www.twitter.com
на французском языке:
{@code
HttpCookie cookie = new HttpCookie("lang", "fr");
cookie.setDomain("twitter.com");
cookie.setPath("/");
cookie.setVersion(0);
cookieManager.getCookieStore().add(new URI("http://twitter.com/"), cookie);
}
<Методы< h3>HTTP/h3>
HttpURLConnection
по умолчанию GET
использует метод . Он будет использовать , POST
если #setDoOutput setDoOutput(true)
был вызван. Другие методы HTTP (OPTIONS
, HEAD
, DELETE
PUT
и TRACE
) можно использовать с #setRequestMethod
.
<h3>Proxies</h3> По умолчанию этот класс подключается непосредственно к серверу-источнику. Он также может подключаться через Proxy.Type#HTTP HTTP
прокси-сервер или Proxy.Type#SOCKS SOCKS
. Чтобы использовать прокси-сервер, используйте URL#openConnection(Proxy) URL.openConnection(Proxy)
при создании подключения.
<h3>IPv6 Support</h3>
Этот класс включает прозрачную поддержку IPv6. Для узлов с IPv4- и IPv6-адресами он будет пытаться подключиться к каждому из адресов узла, пока не будет установлено подключение.
<h3>Кэширование< ответов/h3> Android 4.0 (Ice Cream Sandwich, API уровня 15) включает кэш ответов. См android.net.http.HttpResponseCache
. инструкции по включению кэширования HTTP в приложении.
<h3>Избегая ошибок в более ранних выпусках</h3> до Android 2.2 (Froyo), этот класс имел некоторые разочарование ошибок. В частности, вызов close()
для удобочитаемого InputStream
может отравить пул подключений. Избежать этого можно, отключив пулы подключений:
{@code
private void disableConnectionReuseIfNecessary() {
// Work around pre-Froyo bugs in HTTP connection reuse.
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}}
Каждый экземпляр HttpURLConnection
может использоваться для одной пары "запрос-ответ". Экземпляры этого класса не являются потокобезопасны.
Добавлено в JDK1.1.
Документация по Java для java.net.HttpURLConnection
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Конструкторы
HttpURLConnection(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
HttpURLConnection(URL) |
Конструктор для HttpURLConnection. |
Поля
HttpAccepted |
Устаревшие..
HTTP Status-Code 202: принято. |
HttpBadGateway |
Устаревшие..
HTTP Status-Code 502: недопустимый шлюз. |
HttpBadMethod |
Устаревшие..
HTTP Status-Code 405: метод не разрешен. |
HttpBadRequest |
Устаревшие..
HTTP Status-Code 400: недопустимый запрос. |
HttpClientTimeout |
Устаревшие..
HTTP Status-Code 408: время ожидания запроса. |
HttpConflict |
Устаревшие..
HTTP Status-Code 409: конфликт. |
HttpCreated |
Устаревшие..
HTTP Status-Code 201: создано. |
HttpEntityTooLarge |
Устаревшие..
HTTP Status-Code 413: слишком большой объект запроса. |
HttpForbidden |
Устаревшие..
HTTP Status-Code 403: запрещено. |
HttpGatewayTimeout |
Устаревшие..
HTTP Status-Code 504: время ожидания шлюза. |
HttpGone |
Устаревшие..
HTTP Status-Code 410: нет. |
HttpInternalError |
Устаревшие..
HTTP Status-Code 500: внутренняя ошибка сервера. |
HttpLengthRequired |
Устаревшие..
HTTP Status-Code 411: требуется длина. |
HttpMovedPerm |
Устаревшие..
HTTP Status-Code 301: перемещен без возможности восстановления. |
HttpMovedTemp |
Устаревшие..
HTTP Status-Code 302: временное перенаправление. |
HttpMultChoice |
Устаревшие..
HTTP Status-Code 300: несколько вариантов. |
HttpNoContent |
Устаревшие..
HTTP Status-Code 204: нет содержимого. |
HttpNotAcceptable |
Устаревшие..
HTTP Status-Code 406: недопустимо. |
HttpNotAuthoritative |
Устаревшие..
HTTP Status-Code 203: неавторитетная информация. |
HttpNotFound |
Устаревшие..
HTTP Status-Code 404: не найдено. |
HttpNotImplemented |
Устаревшие..
HTTP Status-Code 501: не реализовано. |
HttpNotModified |
Устаревшие..
HTTP Status-Code 304: не изменено. |
HttpOk |
Устаревшие..
HTTP Status-Code 200: ХОРОШО. |
HttpPartial |
Устаревшие..
HTTP Status-Code 206: частичное содержимое. |
HttpPaymentRequired |
Устаревшие..
HTTP Status-Code 402: требуется оплата. |
HttpPreconFailed |
Устаревшие..
HTTP Status-Code 412: сбой предварительного условия. |
HttpProxyAuth |
Устаревшие..
HTTP Status-Code 407: требуется проверка подлинности прокси-сервера. |
HttpReqTooLong |
Устаревшие..
HTTP Status-Code 414: слишком большой URI запроса. |
HttpReset |
Устаревшие..
HTTP Status-Code 205: сброс содержимого. |
HttpSeeOther |
Устаревшие..
HTTP Status-Code 303: см. другие. |
HttpServerError |
Устаревшие..
HTTP Status-Code 500: внутренняя ошибка сервера. |
HttpUnauthorized |
Устаревшие..
HTTP Status-Code 401: не авторизовано. |
HttpUnavailable |
Устаревшие..
HTTP Status-Code 503: служба недоступна. |
HttpUnsupportedType |
Устаревшие..
HTTP Status-Code 415: неподдерживаемый тип носителя. |
HttpUseProxy |
Устаревшие..
HTTP Status-Code 305: используйте прокси-сервер. |
HttpVersion |
Устаревшие..
HTTP Status-Code 505: версия HTTP не поддерживается. |
Свойства
AllowUserInteraction |
Возвращает значение |
ChunkLength |
Длина блока при использовании режима потоковой передачи фрагментированного кодирования для вывода. |
Class |
Возвращает класс среды выполнения данного объекта |
Connected |
Если |
ConnectTimeout |
Возвращает параметр времени ожидания подключения. -или- Задает указанное значение времени ожидания (в миллисекундах), которое будет использоваться при открытии связи связи с ресурсом, на который ссылается urlConnection. (Унаследовано от URLConnection) |
Content |
Извлекает содержимое этого url-подключения. (Унаследовано от URLConnection) |
ContentEncoding |
Возвращает значение поля заголовка |
ContentLength |
Возвращает значение поля заголовка |
ContentLengthLong |
Возвращает значение поля заголовка в |
ContentType |
Возвращает значение поля заголовка |
Date |
Возвращает значение поля заголовка |
DefaultUseCaches |
Возвращает значение |
DoInput |
Возвращает значение этого |
DoOutput |
Возвращает значение этого |
ErrorStream |
Возвращает поток ошибок, если подключение завершилось сбоем, но сервер тем не менее отправил полезные данные. |
Expiration |
Возвращает значение поля заголовка |
FixedContentLength |
Фиксированная длина содержимого при использовании режима потоковой передачи фиксированной длины. |
FixedContentLengthLong |
Фиксированная длина содержимого при использовании режима потоковой передачи фиксированной длины. |
FollowRedirects |
Возвращает значение , |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
HeaderFields |
Возвращает неизменяемую карту полей заголовка. (Унаследовано от URLConnection) |
IfModifiedSince |
Возвращает значение поля этого объекта |
InputStream |
Возвращает входной поток, который считывает данные из этого открытого подключения. (Унаследовано от URLConnection) |
InstanceFollowRedirects |
Возвращает значение этого |
JniIdentityHashCode |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
JniPeerMembers |
URLConnection с поддержкой функций, зависящих от HTTP. |
LastModified |
Возвращает значение поля заголовка |
Method |
Метод HTTP (GET, POST, PUT и т. д. |
OutputStream |
Возвращает выходной поток, который выполняет запись в это соединение. (Унаследовано от URLConnection) |
PeerReference |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
Permission |
Возвращает объект разрешения, представляющий разрешение, необходимое для создания соединения, представленного этим объектом. (Унаследовано от URLConnection) |
ReadTimeout |
Возвращает параметр времени ожидания чтения. -или- Устанавливает для времени ожидания чтения указанное время ожидания в миллисекундах. (Унаследовано от URLConnection) |
RequestMethod |
Получение метода запроса. -или- Задайте метод для запроса URL-адреса, один из которых: <UL><LI>GET LI>POST <<LI LI LI> HEAD <LI>OPTIONS <LI>PUT <LI>DELETE <LI>TRACE </UL> являются законными с учетом ограничений протокола. |
RequestProperties |
Возвращает неизменяемую карту общих свойств запроса для этого подключения. (Унаследовано от URLConnection) |
ResponseCode |
Получает код состояния из сообщения ответа HTTP. |
ResponseMessage |
Возвращает ответное сообщение HTTP , если таковое имеется, возвращенное вместе с кодом ответа с сервера. |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Url |
URL-адрес представляет удаленный объект в Интернете, к которому открыто это подключение. (Унаследовано от URLConnection) |
URL |
Возвращает значение этого |
UseCaches |
Возвращает значение этого |
Методы
AddRequestProperty(String, String) |
Добавляет общее свойство запроса, заданное парой "ключ-значение". (Унаследовано от URLConnection) |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Connect() |
Открывает связь с ресурсом, на который ссылается этот URL-адрес, если такое подключение еще не установлено. (Унаследовано от URLConnection) |
ConnectAsync() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от URLConnection) |
Disconnect() |
Указывает, что другие запросы к серверу маловероятны в ближайшем будущем. |
Dispose() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
Dispose(Boolean) |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
GetContent(Class[]) |
Извлекает содержимое этого url-подключения. (Унаследовано от URLConnection) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
GetHeaderField(Int32) |
Возвращает значение для поля заголовка |
GetHeaderField(String) |
Возвращает значение поля именованного заголовка. (Унаследовано от URLConnection) |
GetHeaderFieldDate(String, Int64) |
Возвращает значение именованного поля, проанализированного как date. (Унаследовано от URLConnection) |
GetHeaderFieldInt(String, Int32) |
Возвращает значение именованного поля, проанализированного в виде числа. (Унаследовано от URLConnection) |
GetHeaderFieldKey(Int32) |
Возвращает ключ для поля заголовка |
GetHeaderFieldLong(String, Int64) |
Возвращает значение именованного поля, проанализированного в виде числа. (Унаследовано от URLConnection) |
GetRequestProperty(String) |
Возвращает значение именованного свойства общего запроса для этого соединения. (Унаследовано от URLConnection) |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
Notify() |
Пробуждает один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
SetChunkedStreamingMode(Int32) |
Этот метод используется для включения потоковой передачи текста HTTP-запроса без внутренней буферизации, если длина <содержимого b>не>< известна заранее. |
SetFixedLengthStreamingMode(Int32) |
Этот метод используется для включения потоковой передачи текста HTTP-запроса без внутренней буферизации, когда длина содержимого известна заранее. |
SetFixedLengthStreamingMode(Int64) |
Этот метод используется для включения потоковой передачи текста HTTP-запроса без внутренней буферизации, когда длина содержимого известна заранее. |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
SetRequestProperty(String, String) |
Задает свойство общего запроса. (Унаследовано от URLConnection) |
ToArray<T>() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
UsingProxy() |
Указывает, проходит ли подключение через прокси-сервер. |
Wait() |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.>< (Унаследовано от Object) |
Wait(Int64) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.DisposeUnlessReferenced() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.Finalized() |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.JniManagedPeerState |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
URLConnection с поддержкой функций, зависящих от HTTP. (Унаследовано от Object) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенного средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
URLConnection с поддержкой функций, зависящих от HTTP. |
GetJniTypeName(IJavaPeerable) |
URLConnection с поддержкой функций, зависящих от HTTP. |