原題:
$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