解析php 版获取重定向后的地址(代码)

代码如下:
//取重定向的地址
class RedirectUrl{
//地址
var $url;
//初始化地址
function RedirectUrl($url){
$this->url = $url;
}
/**
* get_redirect_url()
* 取重定向的地址
*
* @param string $url
* @return string
*/
private function get_redirect_url($url){
$redirect_url = null;

$url_parts = @parse_url($url);
if (!$url_parts) return false;
if (!isset($url_parts['host'])) return false; //can't process relative URLs
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.1rn";
$request .= 'Host: ' . $url_parts['host'] . "rn";
$request .= "Connection: Closernrn";
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;
}
}

/**
* get_all_redirects()
* 取所有重定向地址
*
* @param string $url
* @return array
*/
private function get_all_redirects($url){
$redirects = array();
while ($newurl = $this->get_redirect_url($url)){
if (in_array($newurl, $redirects)){
break;
}
$redirects[] = $newurl;
$url = $newurl;
}
return $redirects;
}

/**
* get_final_url()
* 取实际地址
*
* @param string $url
* @return string
*/
function get_final_url(){
$redirects = $this->get_all_redirects($this->url);

if (count($redirects)>0){
return array_pop($redirects);
} else {
return $this->url;
}
}
}

/**
* get_show_pic
* 取最终要显示的图片地址
*
* @param string $url
* @return string
*/
function get_show_pic($url,$noimg ='noimg.gif',$newimg="http://special.ku6img.com/projects/2010/d-color/images/slt-1.jpg"){
$obj = new RedirectUrl($url);

$realurl = $obj->get_final_url();

if(strpos($realurl,$noimg)>0){
return $newimg;
}
return $url;
}
//参考
echo "<img src='".get_show_pic("5.jpg")."'/>";
?>

时间: 2024-10-26 17:13:38

解析php 版获取重定向后的地址(代码)的相关文章

解析php 版获取重定向后的地址(代码)_php技巧

复制代码 代码如下: //取重定向的地址  class RedirectUrl{      //地址      var $url;      //初始化地址      function RedirectUrl($url){          $this->url = $url;      }      /**       * get_redirect_url()       * 取重定向的地址       *       * @param string $url       * @return

获取用户真实IP地址代码

获取用户真实IP地址代码 Public Function GetIp(getType)   If getType = 0 then    GetIp = Request.ServerVariables("HTTP_X_FORWARDED_FOR")    if GetIp = "" Then getIp = Request.ServerVariables("REMOTE_ADDR")   ElseIf getType = 1 Then    Ge

VBS获取重定向的URL的代码_vbs

某个人问的问题: 我本来想获取aaa.com页面的内容,可是aaa.com跳转到bbb.com了.我想获取bbb.com 这个网址. 访问了一下他所谓的aaa.com,发现是HTTP 302重定向 复制代码 代码如下: HTTP/1.1 302 Moved Temporarily Server: nginx/0.8.53 Date: Fri, 08 Apr 2011 15:49:25 GMT Content-Type: text/html;charset=utf-8 Transfer-Encod

http协议-http用GET方法获取重定向网址源码

问题描述 http用GET方法获取重定向网址源码 类似天猫商品的网址以GET方法获取的是301. (1)断开程序,截取其中的Location继续GET仍然是301,多次运行,多次截取上一次返回的Location最终会返回200 OK (2)若采用自动截取,循环方法GET无法得到200 OK. 采用截取上次返回的location获取重定向后的网址思路对吗?为什么采用循环GET无法得到200OK?源码附上,谢谢指点. #include<string.h> #include<sys/types

PHP使用CURL获取302跳转后的地址实例

  这篇文章主要介绍了PHP使用CURL获取302跳转后的地址实例,需要的朋友可以参考下 直接上代码: 代码如下: /*返回一个302地址*/ function curl_post_302($url, $vars) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl

javascript-求大神教jQuery中跳转到一个新页面后如何获取前一个页面的地址

问题描述 求大神教jQuery中跳转到一个新页面后如何获取前一个页面的地址 求大神教jQuery中跳转到一个新页面后如何获取前一个页面的地址!!!!!! 解决方案 alert(document.referer) 解决方案二: http://www.51-n.com/t-4016-1-1.html 解决方案三: 直接拼在url 后面.跳转到下一个的时候带着上一个的url 解决方案四: 你可以在上一个页面跳转的时候把地址当作参数传递过去. 解决方案五: 地址?变量="要传的地址" 解决方案

一个网站的入口是A.com/test.aspx?sn=xxxxxx 跳转到B.com/ts.aspx .请问怎么通过程序获取到跳转后的地址呢

问题描述 一个网站的入口是A.com/test.aspx?sn=xxxxxx跳转到B.com/ts.aspx.请问怎么通过程序获取到跳转后的地址呢 解决方案 解决方案二:HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(sRequestUrl);req.Method="HEAD";req.AllowAutoRedirect=false;HttpWebResponsemyResp=(HttpWebResponse)req.GetRes

请问,我获取的本地IP地址为什么不对

问题描述 IPHostEntryiph=Dns.GetHostEntry(Dns.GetHostName());IPAddressio=iph.AddressList[0];foreach(IPAddressipiniph.AddressList){Console.WriteLine(ip.ToString());}Console.ReadKey();最后的输出结果是:fe80::118a:2f6d:22cb:ff7d%112002:6ebb:37df::6ebb:37df169.254.255

c/c++实现获取域名的IP地址_C 语言

c/c++实现获取域名的IP地址 // GetHostIP.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") int main(int argc,