有没有办法使用php发送HEAD和GET请求?

问题描述 投票:0回答:1

我想获取资源的标头而不实际下载它,特别是因为我正在尝试检查较大媒体文件的标头。然而,URL 位于重定向后面,我需要遵循重定向来确定媒体的实际标头。我不确定有多少重定向,并且每个 URL 可能会有所不同。

在下面的答案中,它解释了如何使用 POST HEAD 请求获取标头:

curl -s -I -X POST http://www.google.com

https://stackoverflow.com/a/38679650

这适用于我的用例(使用 GET 而不是 POST),因为我可以获取标头,例如下一个重定向位置,而无需实际下载媒体。然后我可以在重定向后递归地执行此操作,直到获得实际媒体的标题。

但是我不知道如何使用 php 执行 BOTH HEAD and GET 请求。使用某些库(例如 guzzle)可以实现这一点吗?

php curl guzzle
1个回答
0
投票

一种可能是在收到所需标头后中止 GET 请求。示例:

$url = "http://www.example.com/";

$ch = curl_init($url);

curl_setopt_array($ch, array(
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HEADER => true,
    CURLINFO_HEADER_OUT => true,
    CURLOPT_HTTPGET => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADERFUNCTION => 'requestHeaderCallback',
));

$curlResult = curl_exec($ch);

curl_close($ch);

function requestHeaderCallback($ch, $header) {
    $matches = array();
    if (preg_match("/^HTTP/\d.\d (\d{3}) /")) {
        if ($matches[1] < 300 || $matches[1] >= 400) {
            return 0;
        }
    }
    return strlen($header);
}

另请参阅 是否可以在 CURLOPT_HEADERFUNCTION 设置的回调函数中终止 HTTP 请求?

© www.soinside.com 2019 - 2024. All rights reserved.