HTTP context options

HTTP context optionsHTTP context option listing

Description

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

Options

method string

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

Defaults to GET.

header string

Additional headers to be sent during request. Values in this option will override other values (such as User-agent:, Host:, and Authentication:).

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 php.ini 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 boolean

When set to TRUE, the entire URI will be used when constructing the request. (i.e. 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 FALSE.

follow_location integer

Follow Location header redirects. Set to 0 to disable.

Defaults to 1.

max_redirects integer

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.0.

Note:

PHP prior to 5.3.0 does not implement chunked transfer decoding. If this value is set to 1.1 it is your responsibility to be 1.1 compliant.

timeout float

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

By default the default_socket_timeout php.ini setting is used.

ignore_errors boolean

Fetch the content even on failure status codes.

Defaults to FALSE.

Changelog

Version Description
5.3.4 Added follow_location.
5.3.0 The protocol_version supports chunked transfer decoding when set to 1.1.
5.2.10 Added ignore_errors.
5.2.10 The header can now be an numerically indexed array.
5.2.1 Added timeout.
5.1.0 Added HTTPS proxying through HTTP proxies.
5.1.0 Added max_redirects.
5.1.0 Added protocol_version.

Examples

Example #1 Fetch a page and send POST data

<?php

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

$opts = array('http' =>
    array(
        
'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);

?>

Example #2 Ignore redirects but fetch headers and content

<?php

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

$opts = array('http' =>
    array(
        
'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);
?>

Notes

Note: Underlying socket stream context options
Additional context options may be supported by the underlying transport For http:// streams, refer to context options for the tcp:// transport. For https:// streams, refer to context options for the ssl:// transport.

Note: HTTP status line
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 Permantenly',
    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).

Коментарии

Автор:
watch your case when using methods (POST and GET)...it must be always uppercase. in case of you write it in lower case it wont work.
2011-01-18 22:09:38
http://php5.kiev.ua/manual/ru/context.http.html
If you use the proxy server and encounter an error "fopen(http://example.com): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request" note that in many situations you need also set the parameter "request_fulluri" to "true" in your stream options. Without this option the php script sends the empty request to the server as "GET / HTTP/0.0" and the proxy server replies to it with the "HTTP 400" error. 

For example (working sample): 
<?php
$stream 
stream_context_create(Array("http" => Array("method"  => "GET",
                                                     
"timeout" => 20,
                                                     
"header"  => "User-agent: Myagent",
                                                     
"proxy"   => "tcp://my-proxy.localnet:3128",
                                                     
'request_fulluri' => True /* without this option we get an HTTP error! */
                               
)));

if ( 
$fp fopen("http://example.com"'r'false$stream) ) {
    print 
"well done";
}
?>

P>S> PHP 5.3.17
2012-10-23 16:41:30
http://php5.kiev.ua/manual/ru/context.http.html
Автор:
I had quite a bit of trouble trying to make a request with fopen through a proxy to a secure url.  I kept getting a 400 Bad Request back from the remote host.  It was receiving the proxy url as the SNI host.  In order to get around this I had to explicity set the SNI host to the domain I was trying to reach.  It's apparently the issue outlined in this bug: 

https://bugs.php.net/bug.php?id=63519

<?php
$domain 
parse_url($filePHP_URL_HOST);
$proxy_string "tcp://" WP_PROXY_HOST  ":" WP_PROXY_PORT;
$opts = array( 
   
'http' => array( 'proxy' => $proxy_string ),
   
'ssl' => array( 'SNI_enabled' => true'SNI_server_name' => $domain));
$context stream_context_create($opts);
$handle fopen$file'r'false$context );
?>
2014-02-06 08:14:06
http://php5.kiev.ua/manual/ru/context.http.html
Автор:
Note that if you set the protocol_version option to 1.1 and the server you are requesting from is configured to use keep-alive connections, the function (fopen, file_get_contents, etc.) will "be slow" and take a long time to complete. This is a feature of the HTTP 1.1 protocol you are unlikely to use with stream contexts in PHP.

Simply add a "Connection: close" header to the request to eliminate the keep-alive timeout:

<?php
// php 5.4 : array syntax and header option with array value
$data file_get_contents('http://www.example.com/'nullstream_context_create([
   
'http' => [
       
'protocol_version' => 1.1,
       
'header'           => [
           
'Connection: close',
        ],
    ],
]));
?>
2014-04-17 06:19:36
http://php5.kiev.ua/manual/ru/context.http.html
Автор:
Remember to match content with Content-type:

<?php

$data 
= array(
   
'var1' => 'some content',
   
'var2' => 'doh'
);

$opts = array('http' =>
    array(
       
'method'  => 'POST',
       
'header'  => 'Content-type: application/json'// here...
       
'content' => json_encode($data// and here.
   
)
);

. . .

?>
2015-04-14 04:32:45
http://php5.kiev.ua/manual/ru/context.http.html
Note that setting request_fulluri to true will *change* the value of $_SERVER['REQUEST_URI] on the receiving end (from /abc.php to http://domain.com/abc.php).
2017-08-02 11:39:00
http://php5.kiev.ua/manual/ru/context.http.html
If you want to use Basic Auth while using get_headers(), use stream_context options below. 

I am using HEAD method here, but please feel free to use GET also.

<?php
$targetUrl 
'http or https target url here';
$basicAuth base64_encode('username:password');

stream_context_set_default(
    [
       
'http' => [
           
'method' => 'HEAD',
           
'header' => 'Authorization: Basic ' $basicAuth
       
]
    ]
);
$result get_headers($targetUrl);

print_r($result);
2017-09-22 05:50:19
http://php5.kiev.ua/manual/ru/context.http.html
note that for both http and https protocols require the same 'http' context keyword:

<?php

// CORRECT example:
// this will work as expected
// note the url with https but context with http
$correct_data file_get_contents('https://example.com'falsestream_context_create(array('http' => array(...))));

// INVALID example:
// this will not work, the context will be ignored
// note the url with https also context with https
$correct_data file_get_contents('https://example.com'falsestream_context_create(array('https' => array(...))));
2017-10-16 21:50:44
http://php5.kiev.ua/manual/ru/context.http.html
note that both http and https transports require the same context name http

// OK example:
// this will work as expected
// note the url with https but context with http
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('http' => array(...))));

// INVALID example:
// this will not work, the context will be ignored
// note the url with https also context with https
$correct_data = file_get_contents('https://example.com', false, stream_context_create(array('https' => array(...))));
2017-10-16 21:55:50
http://php5.kiev.ua/manual/ru/context.http.html
With the default of 

    'follow_location'   =>  1

be certain NEVER include a "Host:" header in the 'header' array.

If the host is set to "mydomain.com", and that web site has a (quite common) redirect to "www.mydomain.com", then the initial request to "http://mydomain.com" will get the expected response of:

HTTP/1.1 301 Moved Permanently
Location: http://www.mydomain.com/

However, the follow-up request does NOT replace the original "host" header with the new "location" value, as one would expect. Consequently each "follow-location" request will again be served by the original host of "http://mydomain.com", and continue the redirect loop until 'max_redirects' has been exhausted.

(For details: https://bugs.php.net/bug.php?id=77889)
2021-02-16 16:51:34
http://php5.kiev.ua/manual/ru/context.http.html
It's worth noting that the `header` array seems to only want an array of strings, not an associative array.

I just spent a chunk of time debugging something not working as expected (no errors though) which was fixed by converting an associative array of headers into a simple array of strings.
2024-07-04 15:11:57
http://php5.kiev.ua/manual/ru/context.http.html

    Поддержать сайт на родительском проекте КГБ