1
votes

php get_headers() Function - is there any way to tell this function not to follow redirects?

$headers = get_headers("http://example.com/test", 1);
var_dump($headers);

response:

https://i.imgur.com/zjv2G8F.png

1

1 Answers

0
votes

It doesn't look like get_headers() supports that. Here's a way to do with curl instead:

<?php

function getHeadersDontFollowRedirects($url) {
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_HEADER => 1,
        CURLOPT_FOLLOWLOCATION => false,
    ));

    $response = curl_exec($curl);
    curl_close($curl);

    $headers = explode("\n", $response);

    $headers = array_reduce($headers, function($carry, $item) {
        $pieces = explode(":", $item);
        if (count($pieces) === 1) {
            $carry[] = $item;
        } else {
            $carry[$pieces[0]] = $pieces[1];
        }
        return $carry;
    }, []);

    $headers = array_map('trim', $headers);
    $headers = array_filter($headers);

    return $headers;
}

var_dump(getHeadersDontFollowRedirects('http://localhost:3000/redirect.php'));

Outputs:

array(7) {
  [0]=>
  string(18) "HTTP/1.1 302 Found"
  ["Host"]=>
  string(9) "localhost"
  ["Date"]=>
  string(19) "Sat, 10 Jul 2021 00"
  ["Connection"]=>
  string(5) "close"
  ["X-Powered-By"]=>
  string(9) "PHP/8.0.0"
  ["Location"]=>
  string(11) "/target.php"
  ["Content-type"]=>
  string(24) "text/html; charset=UTF-8"
}