Home > database >  how can i get value from response header | API | CURL
how can i get value from response header | API | CURL

Time:02-02

I have integration with other servers using API but I can not get value from the response header to complete authentication and get the session of the server

I try this code


$init = curl_init();

$Auth = [];

$response_headers = [];

$header_callback = function($init,$Auth) use (&$response_headers){
    $len = strlen($Auth);

    $response_headers[] = $Auth;

    return $len;
};

curl_setopt_array($init, [
    CURLOPT_URL => 'http://ip-api/v1/rest/auth',
    CURLOPT_HEADER => true,
    CURLOPT_HEADERFUNCTION => $header_callback
    
]);

$output = curl_exec($init);

$info = curl_getinfo($init);

var_dump($Auth);

echo $Auth[0];

curl_close($init);

but the result is

Warning: Undefined array key 0 in //path

how can get this value

CodePudding user response:

The data you need is within $response_headers, not $Auth.

e.g.

echo $response_headers [11];

would get you the specific value.

CodePudding user response:

You are looking this php function, if I understand right apache_request_headers().

If you have apache this will work. An you will get an array with your headers that you can loop over and take the ['Auth-Nonce'] key. If apache doesn't have the $header['Auth-Nonce'] in the specific HTTP call, null will be returned.

$headers = apache_request_headers();
echo $header['Auth-Nonce'];

In case of Nginx and other webservers try this getallheaders(). If you get an error that says the function doesn't exist do it custom like this:

if (!function_exists('getallheaders'))  {
    function getallheaders()
    {
        if (!is_array($_SERVER)) {
            return array();
        }

        $headers = array();
        foreach ($_SERVER as $name => $value) {
            if (substr($name, 0, 5) == 'HTTP_') {
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
            }
        }
        return $headers;
    }
}

In any case you will get your webserver headers on your call.

  • Related