怎麼通過$a獲取到$b?某豹面試題

牙小木木發表於2019-02-16

原題:

$a=http://aaa.com/a,跳轉到$b=http://bbb.com/b.怎麼通過$a獲取到$b,請用php實現


看一分鐘之後,直覺告訴PHP實現我不會。只知道url_a->url_b,b通過$_SERVER[`HTTP_REFERER`].可以知道a

後來百度,問好朋友。才知道自己理解的有偏差。

真實意圖?

這道題的意思應該是 url重定向後怎麼獲取真實地址。

比如目前的短連結。提供方有百度,微博都有。實際做的就是在百度或者微博伺服器上一個302臨時重定向。另外也有基於短連結的營銷分析等。

重定向的主要技術實現是生成短鏈,此處不是重點。

參考解答

下面用PHP解決上面的題目。


方法一

     $url="http://dwz.cn/4Ww6cV";//
        
        /** $url="http://g.cn";//實際會跳轉到google.cn,
            在此次貼下部分http頭:注意看Status Code 和Location部分
                    Request URL:http://g.cn/
                    Request Method:GET
                    Status Code:301 Moved Permanently (from cache)
                    Remote Address:203.208.39.242:80
                    Response Headers
                    Cache-Control:private, max-age=2592000
                    Content-Length:218
                    Content-Type:text/html; charset=UTF-8
                    Date:Fri, 30 Dec 2016 05:58:51 GMT
                    Expires:Fri, 30 Dec 2016 05:58:51 GMT
                    Location:http://www.google.cn/
                    Server:gws
                    X-Frame-Options:SAMEORIGIN
                    X-XSS-Protection:1; mode=bloc
         **/
                    
                    
        $headers = get_headers($url,true);//加true更友好

        var_dump($headers[`Location`]);
/**
output=>["Location"]=>
  string(188) "https://www.taobao.com/markets/promotion/niandushengdian2016neiyi?spm=a21bo.50862.201862-1.d1.JGeGgF&pos=1&acm=20140506001.1003.2.1437526&scm=1003.2.20140506001.OTHER_1481324141839_1437526"
**/

方法二

$ch=  curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//看名字就知道,follow location,去掉此選項無效
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo $info;
//=>output:https://www.taobao.com/markets/promotion/niandushengdian2016neiyi?spm=a21bo.50862.201862-1.d1.JGeGgF&pos=1&acm=20140506001.1003.2.1437526&scm=1003.2.20140506001.OTHER_1481324141839_1437526

相關文章