从cURL请求的标头获取位置

时间:2012-07-13 17:58:55

标签: php facebook-graph-api curl

我正在尝试在重定向后检索图像的位置网址,但我似乎无法让它工作。我之前从未使用过cURL,但是从我做过的研究看起来我需要它来从Facebook获取图像。到目前为止,这是我的代码:

function getImage($url) {
$ch = curl_init();
// Only calling the head
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true); // header will be at output
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); // HTTP request is 'HEAD'

$content = curl_exec($ch);
curl_close($ch);

return $content;
}

$image = explode("Location: ", getImage("http://graph.facebook.com/553451657/picture?type=large"));

print_r($image);

但我的回答是:

HTTP/1.1 302 Found Access-Control-Allow-Origin: * Cache-Control: private, no-cache, no-store, must-revalidate Content-Type: image/jpeg Expires: Sat, 01 Jan 2000 00:00:00 GMT Location: http://profile.ak.fbcdn.net/hprofile-ak-snc4/161877_553451657_798840908_n.jpg Pragma: no-cache X-FB-Rev: 590433 X-FB-Debug: WH1uJvIjUqiLT8ezVPdude8VKYnXjAHRlFaP8gqF9fI= Date: Fri, 13 Jul 2012 17:56:09 GMT Connection: keep-alive Content-Length: 0 Array ( [0] => 1 ) 

我如何获得位置部分(“http://profile.ak.fbcdn.net/hprofile-ak-snc4/161877_553451657_798840908_n.jpg”)?

2 个答案:

答案 0 :(得分:1)

您可以在标题上执行以下功能:

            $headers = [];

            curl_setopt($curl, CURLOPT_HEADERFUNCTION, function ($ch, $header) use (&$headers) {
                $matches = array();

                if ( preg_match('/^([^:]+)\s*:\s*([^\x0D\x0A]*)\x0D?\x0A?$/', $header, $matches) )
                {
                    $headers[$matches[1]][] = $matches[2];
                }

                return strlen($header);
            });

(看到here

然后将其存储在$headers["Location"][0]中。

我也和您一样,尝试以这种方式获取fb页面图像,似乎不需要PHP SDK,应用程序特权或access_token,但可能会有一些限制(有人知道吗?)

答案 1 :(得分:-2)

  

我如何获得位置部分

获取该位置标题不是您主要目标,对吗?您想从重定向到的地址获取图像,对吗?

因此,只需设置CURLOPT_FOLLOWLOCATION选项,cURL将自动跟踪重定向 并为您提取真实图片。