# DefaultHttpDataSource

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/DefaultHttpDataSource.java+class:androidx.media3.datasource.DefaultHttpDataSource)

*** ** * ** ***

<br />

```
public class DefaultHttpDataSource extends BaseDataSource implements HttpDataSource
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource) ||
|   | ↳ | [androidx.media3.datasource.DefaultHttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource) |

*** ** * ** ***

An `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource` that uses Android's `https://developer.android.com/reference/java/net/HttpURLConnection.html`.

By default this implementation will not follow cross-protocol redirects (i.e. redirects from HTTP to HTTPS or vice versa). Cross-protocol redirects can be enabled by passing `true` to `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource.Factory#setAllowCrossProtocolRedirects(boolean)`.

Note: HTTP request headers will be set using all parameters passed via (in order of decreasing priority) the `dataSpec`, `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#setRequestProperty(java.lang.String,java.lang.String)` and the default properties that can be passed to `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource.Factory#setDefaultRequestProperties(java.util.Map<java.lang.String,java.lang.String>)`.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource.Factory implements https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource.Factory` `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` for `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource` instances. |

| ### Constants |
|---|---|
| `static final int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#DEFAULT_CONNECT_TIMEOUT_MILLIS() = 8000` The default connection timeout, in milliseconds. |
| `static final int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#DEFAULT_READ_TIMEOUT_MILLIS() = 8000` The default read timeout, in milliseconds. |

| ### Public fields |
|---|---|
| `int` | `https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#responseCode()` |

| ### Public methods |
|---|---|
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#clearAllRequestProperties()()` Clears all request headers that were set by `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource#setRequestProperty(java.lang.String,java.lang.String)`. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#clearRequestProperty(java.lang.String)(https://developer.android.com/reference/java/lang/String.html name)` Clears the value of a request header. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#close()()` Closes the source. |
| `int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#getResponseCode()()` When the source is open, returns the HTTP response status code associated with the last `https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/lang/String.html>>` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#getResponseHeaders()()` When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/net/Uri.html` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#getUri()()` When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. |
| `long` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#open(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Opens the source to read the specified data. |
| `int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#read(byte[],int,int)(byte[] buffer, int offset, int length)` Reads up to `length` bytes of data from the input. |
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DefaultHttpDataSource#setRequestProperty(java.lang.String,java.lang.String)(https://developer.android.com/reference/java/lang/String.html name, https://developer.android.com/reference/java/lang/String.html value)` Sets the value of a request header. |

### Inherited Constants

From [androidx.media3.datasource.HttpDataSource](https://developer.android.com/reference/androidx/media3/datasource/HttpDataSource) `static final https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Predicate.html<https://developer.android.com/reference/java/lang/String.html>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/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.

### Inherited methods

From [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource) `final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#addTransferListener(androidx.media3.datasource.TransferListener)(https://developer.android.com/reference/androidx/media3/datasource/TransferListener transferListener)`

Adds a `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` to listen to data transfers.
`final void` `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#bytesTransferred(int)(int bytesTransferred)`

Notifies listeners that bytes were transferred.
`final void` `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferEnded()()`

Notifies listeners that a transfer ended.
`final void` `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferInitializing(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)`

Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` is being initialized.
`final void` `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferStarted(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)`

Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` started.

## Constants

### DEFAULT_CONNECT_TIMEOUT_MILLIS

```
@UnstableApi
public static final int DEFAULT_CONNECT_TIMEOUT_MILLIS = 8000
```

The default connection timeout, in milliseconds.

### DEFAULT_READ_TIMEOUT_MILLIS

```
@UnstableApi
public static final int DEFAULT_READ_TIMEOUT_MILLIS = 8000
```

The default read timeout, in milliseconds.

## Public fields

### responseCode

```
public int responseCode
```

## Public methods

### clearAllRequestProperties

```
@UnstableApi
public void clearAllRequestProperties()
```

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

### clearRequestProperty

```
@UnstableApi
public void clearRequestProperty(String name)
```

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

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html name` | The name of the header field. |

### close

```
@UnstableApi
public void close()
```

Closes the source. This method must be called even if the corresponding call to `https://developer.android.com/reference/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/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` |   |

### getResponseCode

```
@UnstableApi
public int getResponseCode()
```

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

### getResponseHeaders

```
@UnstableApi
public Map<String, List<String>> getResponseHeaders()
```

When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/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.

### getUri

```
@UnstableApi
public @Nullable Uri getUri()
```

When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. The returned `https://developer.android.com/reference/android/net/Uri.html` will be identical to the one passed `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` in the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` unless redirection has occurred. If redirection has occurred, the `https://developer.android.com/reference/android/net/Uri.html` after redirection is returned.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/net/Uri.html` | The `https://developer.android.com/reference/android/net/Uri.html` from which data is being read, or null if the source is not open. |

### open

```
@UnstableApi
public long open(DataSpec dataSpec)
```

Opens the source to read the specified data.

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

### read

```
@UnstableApi
public int read(byte[] buffer, int offset, int length)
```

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/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 |
|---|---|
| `byte[] buffer` | A target array into which data should be written. |
| `int offset` | The offset into the target array at which to write. |
| `int length` | The maximum number of bytes to read from the input. |

| Returns |
|---|---|
| `int` | The number of bytes read, or `https://developer.android.com/reference/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/androidx/media3/datasource/HttpDataSource.HttpDataSourceException` |   |

### setRequestProperty

```
@UnstableApi
public void setRequestProperty(String name, String value)
```

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/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/androidx/media3/datasource/HttpDataSource#open(androidx.media3.datasource.DataSpec)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html name` | The name of the header field. |
| `https://developer.android.com/reference/java/lang/String.html value` | The value of the field. |