Php ';重定向url';未在curl\u getinfo中返回

Php ';重定向url';未在curl\u getinfo中返回,php,curl,Php,Curl,我编写了类似于下面的代码来获取重定向url,这段代码在我的本地计算机上运行良好,但是在我的主机服务器上,主机服务器上的curl版本不支持“redirect_url”,您知道如何解决这个问题吗?i、 例如,我如何实现同样的目标(使用referer发出http请求,然后在没有“redirect_url”帮助的情况下获取重定向url),谢谢 根据,curl\u getinfo不返回名为的数组键“redirect\u url”。也许您需要CURLINFO\u EFFECTIVE\u URL,或者数组键

我编写了类似于下面的代码来获取重定向url,这段代码在我的本地计算机上运行良好,但是在我的主机服务器上,主机服务器上的curl版本不支持“redirect_url”,您知道如何解决这个问题吗?i、 例如,我如何实现同样的目标(使用referer发出http请求,然后在没有“redirect_url”帮助的情况下获取重定向url),谢谢


根据
curl\u getinfo
不返回名为
的数组键“redirect\u url”
。也许您需要
CURLINFO\u EFFECTIVE\u URL
,或者数组键
“URL”

  • $redirect\u url=curl\u getinfo($ch,CURLINFO\u EFFECTIVE\u url)

  • $redirect_url=$info[“url”]

CURLINFO\u EFFECTIVE\u URL
是最后一个有效的URL,因此如果请求被重定向,则最终的URL将在此处


另外,请注意,如果希望curl遵循重定向,则需要在发出请求之前设置
CURLOPT_FOLLOWLOCATION

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

CURL没有
redirect\u url
,而是使用
url
,因此请替换此:

$redirect_url = $info['redirect_url'];
为此:

$redirect_url = $info['url'];

如果我使用curl而不使用FOLLOWLOCATION,我会在curl info中得到一个redirect\uurl元素。这简化了“手动”重定向的任务,但它似乎取决于curl版本

另一种方法是分析响应头并从中获取重定向url。这有助于:

我所做的解决方案是允许插件返回标题并提取位置参数

curl_setopt($ch, CURLOPT_HEADER, 1);
$exec=curl_exec($ch);
$x=curl_error($ch);
$cuinfo = curl_getinfo($ch);

if( $cuinfo['http_code'] == 302 && ! isset($cuinfo['redirect_url']) ){

    if(stristr($exec, 'Location:')){


        preg_match( '{Location:(.*)}' , $exec, $loc_matches);
        $redirect_url = trim($loc_matches[1]);

        if(trim($redirect_url) !=  ''){
            $cuinfo['redirect_url'] = $redirect_url;
        }


    }

}

PHP5.3.7引入了CURLINFO\u重定向\u URL。
请确保您没有旧版本

如果不支持该功能,您将无法使用它。你的问题是什么?我想实现同样的目标,即使用referer发出http请求,然后获取重定向url。当你使用选项将头包含在结果中时,你应该能够分析结果curl返回中包含的头。
curl_setopt($ch, CURLOPT_HEADER, 1);
$exec=curl_exec($ch);
$x=curl_error($ch);
$cuinfo = curl_getinfo($ch);

if( $cuinfo['http_code'] == 302 && ! isset($cuinfo['redirect_url']) ){

    if(stristr($exec, 'Location:')){


        preg_match( '{Location:(.*)}' , $exec, $loc_matches);
        $redirect_url = trim($loc_matches[1]);

        if(trim($redirect_url) !=  ''){
            $cuinfo['redirect_url'] = $redirect_url;
        }


    }

}