[function.fopen]:无法打开流:HTTP请求失败! HTTP/1.1 401未授权
问题描述:
[function.fopen]:无法打开流:HTTP请求失败! HTTP/1.1 401未授权[function.fopen]:无法打开流:HTTP请求失败! HTTP/1.1 401未授权
我定期得到这个错误,即它只发生在随机时间,任何想法会导致这种情况,我检查了我的php.ini并将allow_url_fopen设置为true。
答
10.4.2 401未经授权
请求需要用户认证 。响应必须包含WWW认证报头 字段(第14.47节),其中包含适用于请求的 资源的 询问。客户端可以用合适的授权 头字段重复 请求(14.8节)。如果 请求已包含授权 凭证,则401响应 指示授权已被拒绝这些凭证的 。如果 401响应包含相同 挑战,因为前一响应,并 用户代理已经尝试 认证至少一次,那么 用户应提交这是在响应中给出的实体 ,因为 该实体可能包含相关的 诊断信息。 HTTP访问 认证在“HTTP 认证:基本和摘要 访问认证”[43]中进行了说明。
答
如果网站需要基本身份验证,你可以给你的凭据是这样的:通过读取头手动
fopen("http://user:[email protected]/path/to/resource", "r");
如果使用摘要身份验证,你必须处理它失败的响应,并发送一个新的正确的标题。请参阅HTTP context options了解如何阅读和设置标题,并了解HTTP authentication with PHP中的摘要是如何工作的。您可以使用cURL extension或HTTP PECL extension。
答
任务 - 打开基本的HTTP身份验证。
$auth_header = 'Authorization: Basic '.base64_encode("$user:$password");
$f = fopen($url, $open_mode,false, stream_context_create(
'http'=>array(
'header' => array($auth_header,$some_other_header,$some_yet_header),
),
));
这是不正确的。 http包装器支持基本认证。它不支持摘要式身份验证。 – Artefacto 2010-07-26 13:50:16