# UrlRequest.Builder


```
public abstract class UrlRequest.Builder
```

<br />

*** ** * ** ***

Builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest`s. Allows configuring requests before constructing them with `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#build()`. The builder can be created by calling `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#newUrlRequestBuilder(java.lang.String,org.chromium.net.UrlRequest.Callback,java.util.concurrent.Executor)`.

## Summary

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_HIGHEST() = 4` Highest request priority. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_IDLE() = 0` Lowest request priority. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_LOW() = 2` Low request priority. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_LOWEST() = 1` Very low request priority. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_MEDIUM() = 3` Medium request priority. |

| ### Public constructors |
|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#Builder()()` |

| ### Public methods |
|---|---|
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#addHeader(java.lang.String,java.lang.String)(https://developer.android.com/reference/java/lang/String.html header, https://developer.android.com/reference/java/lang/String.html value)` Adds a request header. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#addRequestAnnotation(java.lang.Object)(https://developer.android.com/reference/java/lang/Object.html annotation)` Associates the annotation object with this request. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#allowDirectExecutor()()` Marks that the executors this request will use to notify callbacks (for ` UploadDataProvider`s and `UrlRequest.Callback`s) is intentionally performing inline execution, like Guava's directExecutor or `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html`. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#bindToNetwork(long)(long networkHandle)` Binds the request to the specified network handle. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#build()()` Creates a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` using configuration within this `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder`. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#disableCache()()` Disables cache for the request. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setHttpMethod(java.lang.String)(https://developer.android.com/reference/java/lang/String.html method)` Sets the HTTP method verb to use for this request. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)(int priority)` Sets priority of the request which should be one of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_IDLE()` values. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `@https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Experimental https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setRawCompressionDictionary(byte[],java.nio.ByteBuffer,java.lang.String)( byte[] dictionarySha256Hash, https://developer.android.com/reference/java/nio/ByteBuffer.html dictionary, https://developer.android.com/reference/java/lang/String.html dictionaryId )` Allows Cronet to use the specified compression dictionary for this request. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setRequestFinishedListener(org.chromium.net.RequestFinishedInfo.Listener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener)` Sets a listener that gets invoked after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)` or `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` return. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setTrafficStatsTag(int)(int tag)` Sets `https://developer.android.com/reference/android/net/TrafficStats.html` tag to use when accounting socket traffic caused by this request. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setTrafficStatsUid(int)(int uid)` Sets specific UID to use when accounting socket traffic caused by this request. |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setUploadDataProvider(org.chromium.net.UploadDataProvider,java.util.concurrent.Executor)( https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UploadDataProvider uploadDataProvider, https://developer.android.com/reference/java/util/concurrent/Executor.html executor )` Sets upload data provider. |

## Constants

### REQUEST_PRIORITY_HIGHEST

```
public static final int REQUEST_PRIORITY_HIGHEST = 4
```

Highest request priority. Passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)`.

### REQUEST_PRIORITY_IDLE

```
public static final int REQUEST_PRIORITY_IDLE = 0
```

Lowest request priority. Passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)`.

### REQUEST_PRIORITY_LOW

```
public static final int REQUEST_PRIORITY_LOW = 2
```

Low request priority. Passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)`.

### REQUEST_PRIORITY_LOWEST

```
public static final int REQUEST_PRIORITY_LOWEST = 1
```

Very low request priority. Passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)`.

### REQUEST_PRIORITY_MEDIUM

```
public static final int REQUEST_PRIORITY_MEDIUM = 3
```

Medium request priority. Passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#setPriority(int)`. This is the default priority given to the request.

## Public constructors

### Builder

```
public Builder()
```

## Public methods

### addHeader

```
public abstract UrlRequest.Builder addHeader(String header, String value)
```

Adds a request header.

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

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### addRequestAnnotation

```
public UrlRequest.Builder addRequestAnnotation(Object annotation)
```

Associates the annotation object with this request. May add more than one. Passed through to a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener`, see `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo#getAnnotations()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/Object.html annotation` | an object to pass on to the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener` with a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo`. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### allowDirectExecutor

```
public abstract UrlRequest.Builder allowDirectExecutor()
```

Marks that the executors this request will use to notify callbacks (for `
UploadDataProvider`s and `UrlRequest.Callback`s) is intentionally performing inline execution, like Guava's directExecutor or `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html`.

**Warning:** This option makes it easy to accidentally block the network thread. It should not be used if your callbacks perform disk I/O, acquire locks, or call into other code you don't carefully control and audit.

### bindToNetwork

```
public UrlRequest.Builder bindToNetwork(long networkHandle)
```

Binds the request to the specified network handle. Cronet will send this request only using the network associated to this handle. If this network disconnects the request will fail, the exact error will depend on the stage of request processing when the network disconnects. Network handles can be obtained through `Network#getNetworkHandle`. Only available starting from Android Marshmallow.

| Parameters |
|---|---|
| `long networkHandle` | the network handle to bind the request to. Specify `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#UNBIND_NETWORK_HANDLE()` to unbind. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### build

```
public abstract UrlRequest build()
```

Creates a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` using configuration within this `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder`. The returned `UrlRequest` can then be started by calling `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest#start()`.

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` | constructed `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` using configuration within this `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder`. |

### disableCache

```
public abstract UrlRequest.Builder disableCache()
```

Disables cache for the request. If context is not set up to use cache, this call has no effect.

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setHttpMethod

```
public abstract UrlRequest.Builder setHttpMethod(String method)
```

Sets the HTTP method verb to use for this request.

The default when this method is not called is "GET" if the request has no body or "POST" if it does.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html method` | "GET", "HEAD", "DELETE", "POST" or "PUT". |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setPriority

```
public abstract UrlRequest.Builder setPriority(int priority)
```

Sets priority of the request which should be one of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_IDLE()` values. The request is given `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_MEDIUM()` priority if this method is not called.

| Parameters |
|---|---|
| `int priority` | priority of the request which should be one of the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder#REQUEST_PRIORITY_IDLE()` values. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setRawCompressionDictionary

```
@UrlRequest.Experimental
public UrlRequest.Builder setRawCompressionDictionary(
    byte[] dictionarySha256Hash,
    ByteBuffer dictionary,
    String dictionaryId
)
```

Allows Cronet to use the specified compression dictionary for this request. When specified, Cronet might signal to the server the availability of said compression dictionary. For this to have any effect, the CronetEngine that will execute this request must have been configured to enable a compression scheme that supports external dictionaries. This partially implements draft-ietf-httpbis-compression-dictionary within Cronet. Cronet won't directly handle "Use-As-Dictionary" response headers, it will instead rely on the embedder to: either, handle them and later call UrlRequest.Builder#setCompressionDictionary for requests which match Use-As-Dictionary's rules; or, fetch compression dictionaries via some other out of band mechanism, and later call UrlRequest.Builder#setCompressionDictionary. Cronet will interpret the dictionary as matching only this UrlRequest. If said request is redirected, and the embedder decides to follow the redirect, the dictionary will match also the new URL.

| Parameters |
|---|---|
| `byte[] dictionarySha256Hash` | the SHA-256 of the specified compression dictionary. |
| `https://developer.android.com/reference/java/nio/ByteBuffer.html dictionary` | the compression dictionary that Cronet can use for this UrlRequest. This must be a direct ByteBuffer. |
| `https://developer.android.com/reference/java/lang/String.html dictionaryId` | the optional ID associated with this dictionary, must be an empty string if missing. If present, this will be sent via the Dictionary-ID header. You would need to specify this if the server specified an id in its "Use-As-Dictionary" response. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setRequestFinishedListener

```
public UrlRequest.Builder setRequestFinishedListener(RequestFinishedInfo.Listener listener)
```

Sets a listener that gets invoked after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onCanceled(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)`, `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onFailed(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo,org.chromium.net.CronetException)` or `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback#onSucceeded(org.chromium.net.UrlRequest,org.chromium.net.UrlResponseInfo)` return.

The listener is invoked with the request finished info on an `https://developer.android.com/reference/java/util/concurrent/Executor.html` provided by `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener#getExecutor()`.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener` | the listener for finished requests. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setTrafficStatsTag

```
public UrlRequest.Builder setTrafficStatsTag(int tag)
```

Sets `https://developer.android.com/reference/android/net/TrafficStats.html` tag to use when accounting socket traffic caused by this request. See `https://developer.android.com/reference/android/net/TrafficStats.html` for more information. If no tag is set (e.g. this method isn't called), then Android accounts for the socket traffic caused by this request as if the tag value were set to 0.

**NOTE:**Setting a tag disallows sharing of sockets with requests with other tags, which may adversely effect performance by prohibiting connection sharing. In other words use of multiplexed sockets (e.g. HTTP/2 and QUIC) will only be allowed if all requests have the same socket tag.

| Parameters |
|---|---|
| `int tag` | the tag value used to when accounting for socket traffic caused by this request. Tags between 0xFFFFFF00 and 0xFFFFFFFF are reserved and used internally by system services like `https://developer.android.com/reference/android/app/DownloadManager.html` when performing traffic on behalf of an application. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setTrafficStatsUid

```
public UrlRequest.Builder setTrafficStatsUid(int uid)
```

Sets specific UID to use when accounting socket traffic caused by this request. See `https://developer.android.com/reference/android/net/TrafficStats.html` for more information. Designed for use when performing an operation on behalf of another application. Caller must hold `
MODIFY_NETWORK_ACCOUNTING` permission. By default traffic is attributed to UID of caller.

**NOTE:**Setting a UID disallows sharing of sockets with requests with other UIDs, which may adversely effect performance by prohibiting connection sharing. In other words use of multiplexed sockets (e.g. HTTP/2 and QUIC) will only be allowed if all requests have the same UID set.

| Parameters |
|---|---|
| `int uid` | the UID to attribute socket traffic caused by this request. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |

### setUploadDataProvider

```
public abstract UrlRequest.Builder setUploadDataProvider(
    UploadDataProvider uploadDataProvider,
    Executor executor
)
```

Sets upload data provider. Switches method to "POST" if not explicitly set. Starting the request will throw an exception if a Content-Type header is not set.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UploadDataProvider uploadDataProvider` | responsible for providing the upload data. |
| `https://developer.android.com/reference/java/util/concurrent/Executor.html executor` | All `uploadDataProvider` methods will be invoked using this ` Executor`. May optionally be the same `Executor` the request itself is using. |

| Returns |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | the builder to facilitate chaining. |