# HttpDataSource

Artifact: [androidx.media3:media3-datasource](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/datasource/HttpDataSource.java+class:androidx.media3.datasource.HttpDataSource)

*** ** * ** ***


```
interface HttpDataSource : DataSource
```

<br />

Known direct subclasses [CronetDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/cronet/CronetDataSource), [DefaultHttpDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DefaultHttpDataSource), [HttpEngineDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpEngineDataSource), [KtorDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource), [OkHttpDataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/okhttp/OkHttpDataSource)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/cronet/CronetDataSource` | DataSource without intermediate buffer based on Cronet API set using UrlRequest. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DefaultHttpDataSource` | An `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` that uses Android's `https://developer.android.com/reference/java/net/HttpURLConnection.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpEngineDataSource` | DataSource without intermediate buffer based on `https://developer.android.com/reference/android/net/http/HttpEngine.html` set using `https://developer.android.com/reference/android/net/http/UrlRequest.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/ktor/KtorDataSource` | An `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` that delegates to Ktor's `https://api.ktor.io/ktor-client-core/io.ktor.client/-http-client/index.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/okhttp/OkHttpDataSource` | An `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` that delegates to Square's Call.Factory. |

*** ** * ** ***

An HTTP `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource`.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi abstract class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.BaseFactory : https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory` Base implementation of `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory` that sets default request properties. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.CleartextNotPermittedException : https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` Thrown when cleartext HTTP traffic is not permitted. |
| `interface https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory : https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource.Factory` A factory for `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` instances. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException : https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSourceException` Thrown when an error is encountered when trying to read from a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource`. |
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/kotlin/androidx/annotation/IntDef(value = ) annotation https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException.Type` The type of operation that produced the error. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.InvalidContentTypeException : https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` Thrown when the content type is invalid. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.InvalidResponseCodeException : https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` Thrown when an attempt to open a connection results in a response code not in the 2xx range. |
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi class https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.RequestProperties` Stores HTTP request properties (aka HTTP headers) and provides methods to modify the headers in a thread safe way to avoid the potential of creating snapshots of an inconsistent or unintended state. |

| ### Constants |
|---|---|
| `const https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!>!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#REJECT_PAYWALL_TYPES()` A `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html` that rejects content types often used for pay-walls. |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#clearAllRequestProperties()()` Clears all request headers that were set by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#clearRequestProperty(java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!)` Clears the value of a request header. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#close()()` Closes the source. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#getResponseCode()()` When the source is open, returns the HTTP response status code associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `(https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-map/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-map/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!, (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!>!>!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#getResponseHeaders()()` When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)(dataSpec: https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec!)` Opens the source to read the specified data. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#read(byte[],int,int)(buffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!, offset: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, length: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Reads up to `length` bytes of data from the input. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)(name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!, value: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!)` Sets the value of a request header. |

### Inherited functions

From [androidx.media3.datasource.DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#addTransferListener(androidx.media3.datasource.TransferListener)(transferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener!)`

Adds a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener` to listen to data transfers.
`https://developer.android.com/reference/android/net/Uri.html?` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#getUri()()`

When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read.

## Constants

### REJECT_PAYWALL_TYPES

```
@UnstableApi
const val REJECT_PAYWALL_TYPES: Predicate<String!>!
```

A `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html` that rejects content types often used for pay-walls.

## Public functions

### clearAllRequestProperties

```
@UnstableApi
fun clearAllRequestProperties(): Unit
```

Clears all request headers that were set by `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)`.

### clearRequestProperty

```
@UnstableApi
fun clearRequestProperty(name: String!): Unit
```

Clears the value of a request header. The change will apply to subsequent connections established by the source.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The name of the header field. |

### close

```
@UnstableApi
fun close(): Unit
```

Closes the source. This method must be called even if the corresponding call to `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` threw an `https://developer.android.com/reference/java/io/IOException.html`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs closing the source. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` |   |

### getResponseCode

```
@UnstableApi
fun getResponseCode(): Int
```

When the source is open, returns the HTTP response status code associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)` call. Otherwise, returns a negative value.

### getResponseHeaders

```
@UnstableApi
fun getResponseHeaders(): (Mutable)Map<String!, (Mutable)List<String!>!>!
```

When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. Otherwise, returns an empty map.

Key look-up in the returned map is case-insensitive.

### open

```
@UnstableApi
fun open(dataSpec: DataSpec!): Long
```

Opens the source to read the specified data.

Note: `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource` implementations are advised to set request headers passed via (in order of decreasing priority) the `dataSpec`, `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)` and the default parameters set in the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory`.

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` |   |

### read

```
@UnstableApi
fun read(buffer: ByteArray<Byte>!, offset: Int, length: Int): Int
```

Reads up to `length` bytes of data from the input.

If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `https://developer.android.com/reference/kotlin/androidx/media3/common/C#RESULT_END_OF_INPUT()` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

| Parameters |
|---|---|
| `buffer: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-byte/index.html>!` | A target array into which data should be written. |
| `offset: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The offset into the target array at which to write. |
| `length: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The maximum number of bytes to read from the input. |

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The number of bytes read, or `https://developer.android.com/reference/kotlin/androidx/media3/common/C#RESULT_END_OF_INPUT()` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs reading from the input. |
| `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` |   |

### setRequestProperty

```
@UnstableApi
fun setRequestProperty(name: String!, value: String!): Unit
```

Sets the value of a request header. The value will be used for subsequent connections established by the source.

Note: If the same header is set as a default parameter in the `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource.Factory`, then the header value set with this method should be preferred when connecting with the data source. See `https://developer.android.com/reference/kotlin/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)`.

| Parameters |
|---|---|
| `name: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The name of the header field. |
| `value: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The value of the field. |