分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

【转】PHP获取重定向URL的几种方法

发布时间:2023-09-06 02:24责任编辑:苏小强关键词:PHP

有时候我们会在开发中,经常会遇到有URL 301或 302重定向的情况,这时候我们可能需要获取重定向之后的url,下面我们介绍一下几种获取重定向url的方法:

1、用get_headers函数
php自带的get_headers函数可以获取服务器响应一个HTTP请求所发送的所有标头,我们可以尝试用该函数实现。

function get_redirect_url($url){ ??$header = get_headers($url, 1); ??if (strpos($header[0], ’301′) !== false || strpos($header[0], ’302′) !== false) { ????if(is_array($header[‘Location‘])) { ??????return $header[‘Location‘][count($header[‘Location‘])-1]; ????}else{ ??????return $header[‘Location‘]; ???????} ??}else { ????return $url; ??} }

  

2、使用fsockopen()内置函数

function get_redirect_url($url){ ??$redirect_url = false; ??$url_parts = @parse_url($url); ??if (!$url_parts) return false; ??if (!isset($url_parts[‘host‘])) return false; ??if (!isset($url_parts[‘path‘])) $url_parts[‘path‘] = ‘/’; ??$sock = fsockopen($url_parts[‘host‘], (isset($url_parts[‘port‘]) ? ??(int)$url_parts[‘port‘] : 80), $errno, $errstr, 30); ??if (!$sock) return false; ?$request = “HEAD ” . $url_parts[‘path‘] . (isset($url_parts[‘query‘]) ? ‘?’.$url_parts[‘query‘] : ”) . ” HTTP/1.1\r\n”; ??$request .= ‘Host: ‘ . $url_parts[‘host‘] . “\r\n”; ??$request .= “Connection: Close\r\n\r\n”; ??fwrite($sock, $request); ??$response = ”; ??while(!feof($sock)) $response .= fread($sock, 8192); ??fclose($sock); ?if (preg_match(‘/^Location: (.+?)$/m’, $response, $matches)){ ????return trim($matches[1]); ??} else { ???return false; ?}}

  

3、使用cURL函数

function get_redirect_url($url, $referer=”, $timeout = 10) { ??$redirect_url = false; ??$ch = curl_init(); ??curl_setopt($ch, CURLOPT_URL, $url); ??curl_setopt($ch, CURLOPT_HEADER, TRUE); ??curl_setopt($ch, CURLOPT_NOBODY, TRUE);//不返回请求体内容 ??curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);//允许请求的链接跳转 ??curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); ??curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); ??curl_setopt($ch, CURLOPT_HTTPHEADER, array( ?????‘Accept: */*’, ?????‘User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)’, ?????‘Connection: Keep-Alive’)); ??if ($referer) { ????curl_setopt($ch, CURLOPT_REFERER, $referer);//设置referer ??} ??$content = curl_exec($ch); ??if(!curl_errno($ch)) { ????$redirect_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);//获取最终请求的url地址 ??} ??return $redirect_url;}

  

哪个方法的效果更高一些,可以自行测试一下。

from:https://blog.csdn.net/zimuxin/article/details/52228917

【转】PHP获取重定向URL的几种方法

原文地址:https://www.cnblogs.com/xuan52rock/p/10046454.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved