gpt4 book ai didi

PHP: get_headers 设置临时 stream_context

转载 作者:可可西里 更新时间:2023-11-01 12:47:09 24 4
gpt4 key购买 nike

我猜想 PHP 的 get_headers 不允许使用上下文,所以我必须更改默认流上下文以仅获取请求的 HEAD。这会导致页面上的其他请求出现一些问题。我似乎无法弄清楚如何重置默认流上下文。我正在尝试类似的东西:

$default = stream_context_get_default(); //Get default stream context so we can reset it
stream_context_set_default( //Only fetch the HEAD
array(
'http' => array(
'method' => 'HEAD'
)
)
);
$headers = get_headers($url, 1); //Url can be whatever you want it to be
//var_dump($headers);
var_dump($default);
stream_context_set_default($default); //This doesn't work as it expects an array and not a resource pointer

有人知道解决这个问题的办法吗?

我知道有人建议使用 Curl,但我不想使用这个。谢谢!

最佳答案

我最终使用了 stream_get_meta_data()获取 HTTP header 的函数。

我是这样实现的:

function get_headers_with_stream_context($url, $context, $assoc = 0) {
$fp = fopen($url, 'r', null, $context);
$metaData = stream_get_meta_data($fp);
fclose($fp);

$headerLines = $metaData['wrapper_data'];

if(!$assoc) return $headerLines;

$headers = array();
foreach($headerLines as $line) {
if(strpos($line, 'HTTP') === 0) {
$headers[0] = $line;
continue;
}

list($key, $value) = explode(': ', $line);
$headers[$key] = $value;
}

return $headers;
}

这样调用,

$context = stream_context_create(array('http' => array('method' => 'HEAD')));
$headers = get_headers_with_stream_context($url, $context, 1);

它会在不修改标准 stream_context 的情况下为您提供所需内容。

请注意,如果传递的不是 http url,此函数将失败。

似乎有一个feature request获取 get_headers() 的附加参数,但在我写这篇文章时错误跟踪器已关闭,因此我无法在那里检查其他解决方案。

关于PHP: get_headers 设置临时 stream_context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8429342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com