首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP curl()一次获取所有标头

问PHP curl()一次获取所有标头
EN

Stack Overflow用户
提问于 2016-02-25 08:55:50
回答 2查看 1.3K关注 0票数 6
代码语言:javascript
复制
<?php
    $url = 'http://fb.com';
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_HEADER => true,
    ));
    $header = explode("\n", curl_exec($curl));
    curl_close($curl);
    print_r($header);

结果

代码语言:javascript
复制
HTTP/1.1 301 Moved Permanently
Location: http://www.facebook.com/?_rdr
Vary: Accept-Encoding
Content-Type: text/html
X-FB-Debug: rVg0o+qDt9z/zJu7jTW1gi1WSRC8YIMu3e6XnPagx39zZ4pbV0k2yrNfZmkdTLZyfzg713X+M0Lr2jS2P018xA==
Date: Thu, 25 Feb 2016 08:48:08 GMT
Connection: keep-alive
Content-Length: 0

但我想一次得到所有的Location

代码语言:javascript
复制
I enter > http://fb.com

then 301 redirect: http://www.facebook.com/?_rdr

then 302 redirect: https://www.facebook.com/

我想一次获得状态301 302的所有链接。

或者其他更好的方法来获得重定向地址url。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-25 09:33:08

您可以从每个发出的请求中获取所有头部,直到没有发送任何Location标头为止:

代码语言:javascript
复制
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$headers = curl_exec($ch);
curl_close($ch);

但是,您必须自己提取信息,因为$headers只是一个字符串,而不是数组。

如果您只需要最后一个位置,只需执行curl_getinfo($ch,CURLINFO_EFFECTIVE_URL)。

票数 3
EN

Stack Overflow用户

发布于 2016-02-25 09:21:36

使用getinfo()检查是否有301或302响应,然后重复相同的代码,只要是这样的话。因此,将您的代码放入一个函数中,如:

代码语言:javascript
复制
$headers = array();

function getHeaders($url) {
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => $url,
        CURLOPT_HEADER => true,
    ));
    $header = explode("\n", curl_exec($curl));

    if (in_array(curl_getinfo($curl, CURLINFO_HTTP_CODE), array(301, 302))) {
        // Got a 301 or 302, store this stuff and do it again
        $headers[] = $header;
        curl_close($curl);
        return getHeaders($url);
    }

    $headers[] = $header;
    curl_close($curl);
}

然后,$headers将保存所有遇到的头,直到第一个非301/302响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35622495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档