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