PHP 8.3.4 Released!

http://

https://

http:// -- https://Acessando URLs HTTP(s)

Descrição

Permite acesso somente leitura a arquivos/recursos via HTTP. Por padrão um GET HTTP 1.0 é usado. Um cabeçalho Host: é enviado com a requisição para lidar com hosts virtuais baseados em nomes. Se estiver configurado uma string user_agent no arquivo php.ini ou no contexto do fluxo, ele também será incluído na requisição.

O fluxo permite acesso ao corpo do recurso; os cabeçalhos são armazenados na variável $http_response_header.

Se for importante conhecer o URL do recurso de onde o documento se originou (depois de todos os redirecionamentos processados), será necessário processar a série de cabeçalhos de resposta retornados pelo fluxo.

A diretiva from será usada para o cabeçalho From: se definida e não sobrescrita pelo Opções e parâmetros de contexto.

Uso

  • http://example.com
  • http://example.com/arquivo.php?var1=val1&var2=val2
  • http://usuario:senha@example.com
  • https://example.com
  • https://example.com/arquivo.php?var1=val1&var2=val2
  • https://usuario:senha@example.com

Opções

Sumário do Empacotador
Atributo Suportado
Restrito por allow_url_fopen Sim
Permite Leitura Sim
Permite Escrita Não
Permite Adição Não
Permite Leitura e Escrita Simultâneas N/A
Suporta stat() Não
Suporta unlink() Não
Suporta rename() Não
Suporta mkdir() Não
Suporta rmdir() Não

Exemplos

Exemplo #1 Detectando a qual se chegou depois de todos os redirecionamentos

<?php
$url
= 'http://www.example.com/redirecting_page.php';

$fp = fopen($url, 'r');

$meta_data = stream_get_meta_data($fp);
foreach (
$meta_data['wrapper_data'] as $response) {

/* Fomos redirecionados? */
if (strtolower(substr($response, 0, 10)) == 'location: ') {

/* atualiza $url para onde fomos redirecionados */
$url = substr($response, 10);
}

}

?>

Notas

Nota: HTTPS só é suportado quando a extensão openssl estiver habilitada.

Conexões HTTP são somente leitura; escrever dados ou copiar arquivos para um recurso HTTP não é suportado.

Enviar requisições POST e PUT, por exemplo, pode ser feito com a ajuda de Contextos HTTP.

Veja Também

add a note

User Contributed Notes 4 notes

up
5
Rainer Perske
8 years ago
Passing authentication information in the URL as in "https://user:password@example.com" works for HTTP "Basic" access authentication but not for HTTP "Digest" access authentication. You can use the cURL functions for servers requesting HTTP "Digest" access authentication.
up
4
dwalton at acm dot org
17 years ago
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.
up
-2
NEA at AraTaraBul dot com
16 years ago
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;
}
?>
up
-13
Sinured
16 years ago
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');
?>
To Top