http://

https://

http:// -- https://访问 HTTP(s) URL

说明

允许通过 HTTP 读取访问文件/资源。默认情况下,使用 HTTP 1.0 GET。请求中会发送 Host: 标头以处理基于名称的虚拟主机。如果您已使用 php.ini 文件或流上下文配置了 user_agent 字符串,它也会包含在请求中。

该流允许访问资源的主体;标头存储在 $http_response_header 变量中。

如果必须知道文档来源的资源 URL(在处理完所有重定向后),则需要处理流返回的一系列响应标头。

如果已设置并且未被 上下文选项和参数 覆盖,from 指令将用于 From: 标头。

用法

  • http://example.com
  • http://example.com/file.php?var1=val1&var2=val2
  • http://user:[email protected]
  • https://example.com
  • https://example.com/file.php?var1=val1&var2=val2
  • https://user:[email protected]

选项

包装器摘要
属性 支持
allow_url_fopen 限制
允许读取
允许写入
允许追加
支持同时读写 N/A
支持 stat()
支持 unlink()
支持 rename()
支持 mkdir()
支持 rmdir()

示例

示例 #1 检测重定向后的最终 URL

<?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) {

/* 我们是否被重定向? */
if (strtolower(substr($response, 0, 10)) == 'location: ') {

/* 使用重定向到的位置更新 $url */
$url = substr($response, 10);
}

}

?>

注释

注意: 仅当启用了 openssl 扩展时才支持 HTTPS。

HTTP 连接是只读的;不支持写入数据或将文件复制到 HTTP 资源。

例如,发送POSTPUT 请求可以使用 HTTP 上下文

另请参阅

添加注释

用户贡献的注释 4 个注释

Rainer Perske
8 年前
在 URL 中传递身份验证信息(如 "https://user:[email protected]")适用于 HTTP "Basic" 访问身份验证,但不适用于 HTTP "Digest" 访问身份验证。您可以使用 cURL 函数来处理请求 HTTP "Digest" 访问身份验证的服务器。
dwalton at acm dot org
17 年前
正如此页面所说

"该流允许访问资源的主体;标头存储在 $http_response_header 变量中。从 PHP 4.3.0 开始,标头可以使用 stream_get_meta_data() 获取。"

这句话是我发现的关于神秘的 $http_response_header 变量的唯一文档,我担心它很误导。它暗示从 4.3.0 开始,应该使用 stream_get_meta_data() 而不是 $http_response_header。

不要被骗了!stream_get_meta_data() 需要一个流引用,这使得它只对 fopen() 及其相关函数有用。但是,$http_response_header 可用于从更简单的 file_get_contents() 及其相关函数中获取标头,这使得它在 5.x 中仍然非常有用。

还要注意,即使 file_get_contents() 及其相关函数由于 4xx 或 5xx 错误而失败并返回 false,标头仍然可以在 $http_response_header 中获取。
NEA at AraTaraBul dot com
17 年前
HTTP post 函数;

<?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;
}
?>
Sinured
17 年前
如果您想要发送多个自定义头部,只需将头部设置为数组即可

<?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