A note on how to deal with Cookies
To receive a cookie:
$httphandle = fopen($url,"r");
$meta = stream_get_meta_data($httphandle);
for ($j = 0; isset($meta['wrapper_data'][$j]); $j++) {
$httpline = $meta['wrapper_data'][$j];
@list($header,$parameters) = explode(";",$httpline,2);
@list($attr,$value) = explode(":",$header,2);
if (strtolower(trim($attr)) == "set-cookie") {
$cookie = trim($value);
break;
}
}
fclose($httphandle);
echo $cookie;
To send a cookie:
$user_agent = ini_get("user_agent");
ini_set("user_agent",$user_agent . "\r\nCookie: " . $cookie);
$httphandle = fopen($url,"r");
fclose($httphandle);
ini_set("user_agent",$user_agent);
HTTP a HTTPS
PHP 3, PHP 4, PHP 5. https:// od PHP 4.3.0
- http://example.com
- http://example.com/file.php?var1=val1&var2=val2
- http://user:password@example.com
- https://example.com
- https://example.com/file.php?var1=val1&var2=val2
- https://user:password@example.com
Umožňuje prístup iba na čítanie k súborom/zdrojom cez HTTP 1.0 použitím metódy HTTP GET. Hlavička Host: sa pošle s požiadavkou na zaistenie na mene založených virtuálnych hostov. Ak ste nakonfigurovali reťazec user_agent použitím vášho ini súboru alebo prúdového kontextu, taktiež sa zahrnie do požiadavky.
Pri používaní SSL, Microsoft IIS naruší protokol ukončením spojenia bez poslania indikátora notifikácie uzavrenia. PHP toto zahlási ako "SSL: Fatal Protocol Error", keď dosiahnete koniec dát. Aby ste sa tomu vyhli, mali by ste znížiť vašu error_reporting úroveň, aby nezahŕňala varovania. PHP 4.3.7 a vyššie dokážu detekovať chybový IIS server software pri otváraní prúdu pomocou https:// wrappera a potlačí varovanie namiesto vás. Ak používate fsockopen() pre tvorbu ssl:// soketu, tak ste zodpovedný za detekovanie a potlačenie varovania sami.
Uz PHP 4.0.5 podporuje presmerovania; ak používate predchádzajúce verzie, budete musieť zahrnúť vodiace lomítka do svojich URL adries. Ak je dôležité vedieť URL zdroja, od kiaľ váš dokument prišiel (po tom, čo boli spracované všetky presmerovania), budete potrebovať spracovať série hlavičiek odoziev vrátených prúdom.
<?php
$url = 'http://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
/* V skorsich verziach nez PHP 4.3.0 pouzite $http_response_header
namiesto stream_get_meta_data() */
foreach(stream_get_meta_data($fp) as $odozva) {
/* Boli sme presmerovany? */
if (substr(strtolower($odozva), 0, 10) == 'location: ') {
/* aktualizuj $url s tym, kam sme boli presmerovany */
$url = substr($odozva, 10);
}
}
?>
Prúd umožňuje prístup k telu zdroja; hlavičky sú uložené v premennej $http_response_header. Od PHP 4.3.0, hlavičky sú dostupné použitím stream_get_meta_data().
Pripojenia cez HTTP sú iba na čítanie; nemôžete zapisovať dáta alebo kopírovať súbory do HTTP zdroja.
Note: HTTPS podporovalo už PHP 4.3.0, ak ste kompilovali s podporou pre OpenSSL.
| Atribút | Podporovaný |
|---|---|
| Obmedzený cez allow_url_fopen. | Áno |
| Umožňuje Čítanie | Áno |
| Umožňuje Zápis | Nie |
| Umožňuje pridávanie | Nie |
| Umožňuje Súbežné Čítanie a Zápis | N/A |
| Podporuje stat() | Nie |
| Podporuje unlink() | Nie |
| Podporuje rename() | Nie |
| Podporuje mkdir() | Nie |
| Podporuje rmdir() | Nie |
| Názov | Použitie | Default |
|---|---|---|
| method | GET alebo POST | GET |
| header | Ďalšie hlavičky na odoslanie počas požiadavky. Hodnoty v tejto voľbe anulujú ostatné hodnoty (ako User-agent:, Host: a Authentication:. | |
| user_agent | Hodnoty na odoslanie s hlavičkou User-Agent:. Táto hodnota sa použije iba ak user_agent nie je určený v kontextovej voľbe header uvedenej vyššie. | php.ini nastavenie: user_agent |
| obsah | Ďalšie dáta na odoslanie po hlavičkách. Typicky sa používajú s požiadavkami POST alebo PUT. | |
| proxy | URI určujúca adresu proxy servera. (napr. tcp://proxy.example.com:5100 ). | |
| request_fulluri | Keď je nastavená na TRUE, celá URI bude použitá pri konštruovaní požiadavky. (napr. GET http://www.example.com/path/to/file.html HTTP/1.0). Zatialčo je toto neštandardný formát požiadavky, niektoré proxy servery ho vyžadujú. | FALSE |
Note: Podčiarkovanie soketového prúdu kontextových volieb Ďalšie kontextové voľby možu byť podporované podčiarkujúcim prenosom Pre http:// prúdy si pozrite kontextové voľby pre tcp:// prenos. Pre https:// prúdy si pozrite kontextové voľby pre ssl:// prenos.
HTTP a HTTPS
26-Jun-2008 04:17
24-Oct-2007 03:27
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.
29-Jul-2007 04:06
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;
}
?>
28-Jun-2007 03:24
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');
?>
17-Nov-2006 12:18
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.
