# http

<div data-wrapper="1" role="stream_context_option">

HTTP context options

</div>

<div data-wrapper="1" role="stream_context_option">

HTTP context option listing

</div>

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

<div data-wrapper="1" role="stream_context_option">

Context options for `http://` and `https://` transports.

</div>

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

<div data-wrapper="1" role="stream_context_option">

`method` `string`  
`GET`, `POST`, or any other HTTP method supported by the remote server.

Defaults to `GET`.

`header` `array` or `string`  
Additional headers to be sent during request. Values in this option will override other values (such as `User-agent:`, `Host:`, and `Authentication:`), even when following `Location:` redirects. Thus it is not recommended to set a `Host:` header, if `follow_location` is enabled.

String value should be `Key: value` pairs delimited by `\r\n`, e.g. `"Content-Type: application/json\r\nConnection: close"`. Array value should be a list of `Key: value` pairs, e.g. `["Content-Type: application/json", "Connection: close"]`.

`user_agent` `string`  
Value to send with `User-Agent:` header. This value will only be used if user-agent is *not* specified in the `header` context option above.

By default the [user_agent](#ini.user-agent) ENTITY setting is used.

`content` `string`  
Additional data to be sent after the headers. Typically used with POST or PUT requests.

`proxy` `string`  
URI specifying address of proxy server (e.g. `tcp://proxy.example.com:5100`).

`request_fulluri` `bool`  
When set to ENTITY, the entire URI will be used when constructing the request (e.g. `GET http://www.example.com/path/to/file.html HTTP/1.0`). While this is a non-standard request format, some proxy servers require it.

Defaults to ENTITY.

`follow_location` `int`  
Follow `Location` header redirects. Set to `0` to disable.

When this option is not set, redirects are only followed for the `300`, `301`, `302`, `303`, `307` and `308` response codes. Setting it to `1` is not equivalent: any response carrying a `Location` header is then followed, whatever its response code.

`max_redirects` `int`  
The max number of redirects to follow. Value `1` or less means that no redirects are followed.

Defaults to `20`.

`protocol_version` `float`  
HTTP protocol version.

Defaults to `1.1` as of PHP 8.0.0; prior to that version the default was `1.0`.

`timeout` `float`  
Read timeout in seconds, specified by a `float` (e.g. `10.5`).

By default the [default_socket_timeout](#ini.default-socket-timeout) ENTITY setting is used.

`ignore_errors` `bool`  
Fetch the content even on failure status codes.

Defaults to ENTITY.

`uri_parser_class` `string` or `null`  
The class to use for parsing URIs. When ENTITY, the legacy behavior based on `parse_url` is used. Accepted values are `Uri\Rfc3986\Uri` (RFC 3986 compliant parser) and `Uri\WhatWg\Url` (WHATWG URL Standard parser). Custom userland implementations are not supported.

Defaults to ENTITY.

</div>

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

| ENTITY | ENTITY                                   |
|--------|------------------------------------------|
| 8.5.0  | The `uri_parser_class` option was added. |

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

<div id="context.http.example-post" class="example" role="stream_context_option">

<div class="title">

Fetch a page and send POST data

</div>

```
<?php

$postdata = http_build_query(
    [
        'var1' => 'some content',
        'var2' => 'doh',
    ]
);

$opts = [
    'http' => [
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata,
    ]
];

$context = stream_context_create($opts);

$result = file_get_contents('http://example.com/submit.php', false, $context);

?>

    
```

</div>

<div id="context.http.example-fetch-ignore-redirect" class="example" role="stream_context_option">

<div class="title">

Ignore redirects but fetch headers and content

</div>

```
<?php

$url = "http://www.example.org/header.php";

$opts = [
    'http' => [
        'method'        => 'GET',
        'max_redirects' => '0',
        'ignore_errors' => '1',
    ]
];

$context = stream_context_create($opts);
$stream = fopen($url, 'r', false, $context);

// header information as well as meta data
// about the stream
var_dump(stream_get_meta_data($stream));

// actual data at $url
var_dump(stream_get_contents($stream));
fclose($stream);
?>

    
```

</div>

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

> [!NOTE]
> Additional context options may be supported by the [underlying transport](#transports.inet) For `http://` streams, refer to context options for the `tcp://` transport. For `https://` streams, refer to context options for the `ssl://` transport.

> [!NOTE]
> When this stream wrapper follows a redirect, the `wrapper_data` returned by `stream_get_meta_data` might not necessarily contain the HTTP status line that actually applies to the content data at index `0`.
>
>     array (
>       'wrapper_data' =>
>       array (
>         0 => 'HTTP/1.0 301 Moved Permanently',
>         1 => 'Cache-Control: no-cache',
>         2 => 'Connection: close',
>         3 => 'Location: http://example.com/foo.jpg',
>         4 => 'HTTP/1.1 200 OK',
>         ...
>
>        
>
> The first request returned a `301` (permanent redirect), so the stream wrapper automatically followed the redirect to get a `200` response (index = `4`).

# 

<div data-wrapper="1" role="stream_context_option">

ENTITY

</div>

<div data-wrapper="1" role="stream_context_option">

[???](#wrappers.http), [???](#context.socket), [???](#context.ssl)

</div>