|
HTTP and HTTPSPHP 3, PHP 4, PHP 5.
Allows read-only access to files/resources via HTTP 1.0,
using the HTTP GET method. A
Warning:
When using SSL, Microsoft IIS will violate the protocol by closing the connection without sending a close_notify indicator. PHP will report this as "SSL: Fatal Protocol Error" when you reach the end of the data. To workaround this, you should lower your error_reporting level not to include warnings. PHP 4.3.7 and higher can detect buggy IIS server software when you open the stream using the https:// wrapper and will suppress the warning for you. If you are using fsockopen() to create an ssl:// socket, you are responsible for detecting and suppressing the warning yourself. Redirects have been supported since PHP 4.0.5; if you are using an earlier version you will need to include trailing slashes in your URLs. If it's important to know the URL of the resource where your document came from (after all redirects have been processed), you'll need to process the series of response headers returned by the stream. <?php Example O.2. Fetch a page and send POST data<?php
The stream allows access to the body of
the resource; the headers are stored in the
HTTP connections are read-only; you cannot write data or copy files to an HTTP resource.
Note:
HTTPS is supported starting from PHP 4.3.0, if you have compiled in support for OpenSSL. Table O.3. Context options
Underlying socket stream context options:
Additional context options may be supported by the
underlying transport
For
Custom headers may be sent with an HTTP request prior to
version 5 by taking advantage of a side-effect in the
handling of the Example O.3. Sending custom headers with an HTTP request<?php Results in the following request being sent: GET /index.php HTTP/1.0 Code Examples / Notes » wrappers.httpspazdaq
just an FYI about digest authentication. While one of the above http examples has the username and password info supplied with the url, this must only be for basic authentication. it does not appear to work for digest authentication. you have to handle the digest followup request on your own. sinured
If you want to send more than one custom header, just make header an array: <?php $default_opts = array( 'http' => array( 'user_agent' => 'Foobar', 'header' => array( 'X-Foo: Bar', 'X-Bar: Baz' ) ) ); stream_context_get_default($default_opts); readfile('http://www.xhaus.com/headers'); ?> nea
HTTP post function; <?php function post_it($datastream, $url) { $url = preg_replace("@^http://@i", "", $url); $host = substr($url, 0, strpos($url, "/")); $uri = strstr($url, "/"); $reqbody = ""; foreach($datastream as $key=>$val) { if (!empty($reqbody)) $reqbody.= "&"; $reqbody.= $key."=".urlencode($val); } $contentlength = strlen($reqbody); $reqheader = "POST $uri HTTP/1.1\r\n". "Host: $host\n". "User-Agent: PostIt\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Content-Length: $contentlength\r\n\r\n". "$reqbody\r\n"; $socket = fsockopen($host, 80, $errno, $errstr); if (!$socket) { $result["errno"] = $errno; $result["errstr"] = $errstr; return $result; } fputs($socket, $reqheader); while (!feof($socket)) { $result[] = fgets($socket, 4096); } fclose($socket); return $result; } ?> dwalton
As it says on this page: "The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data()." This one sentence is the only documentation I have found on the mysterious $http_response_header variable, and I'm afraid it's misleading. It implies that from 4.3.0 onward, stream_get_meta_data() ought to be used in favor of $http_response_header. Don't be fooled! stream_get_meta_data() requires a stream reference, which makes it ONLY useful with fopen() and related functions. However, $http_response_header can be used to get the headers from the much simpler file_get_contents() and related functions, which makes it still very useful in 5.x. Also note that even when file_get_contents() and friends fail due to a 4xx or 5xx error and return false, the headers are still available in $http_response_header. |