我怎样才能在PHP中执行此操作? e.g。
bit.ly/f00b4r ==> http://www.google.com/search?q=cute+kittens
在Java中,解决方案是:
你应该发出一个HEAD请求 使用HttpWebRequest的url 实例。在返回 HttpWebResponse,检查一下 ResponseUri。
确保AllowAutoRedirect 在HttpWebRequest上设置为true instance(默认为true)。 (Thx,casperOne)
代码是
private static string GetRealUrl(string url)
{
WebRequest request = WebRequest.Create(url);
request.Method = WebRequestMethods.Http.Head;
WebResponse response = request.GetResponse();
return response.ResponseUri.ToString();
}
(Thx,Fredrik Mork)
但我想用PHP做。如何? :)
答案 0 :(得分:5)
是时候尝试了,你已经找到了答案。
尽管如此,我还是会这样:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://bit.ly/tqdUj");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
curl_close($ch);
var_dump($url);
一些解释:
而且,在这里,你得到:
string 'http://wordpress.org/extend/plugins/wp-pubsubhubbub/' (length=52)
(来自我看到的包含短网址的最后一条推文之一)
这应该适用于任何缩短URL服务,与其特定的API无关。
您可能还想调整一些其他选项,例如超时;有关更多信息,请参阅curl_setopt。
答案 1 :(得分:1)
<?php
$url = 'http://www.example.com';
print_r(get_headers($url));
print_r(get_headers($url, 1));
?>
答案 2 :(得分:1)
您是否阅读过bit.ly API?具体是here?
我看不出这个问题。你在谈论可能的重定向吗?
答案 3 :(得分:0)
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//$header['errno'] = $err;
// $header['errmsg'] = $errmsg;
//$header['content'] = $content;
print($header[0]);
return $header;
}
$thisurl = "http://www.example.com/redirectfrom";
$myUrlInfo = get_web_page( $thisurl );
echo $myUrlInfo["url"];
答案 4 :(得分:0)
这是我的解决方案。我对它进行了编码,因为以上都没有正常工作。
function get_final_location($url, $index=null) {
if (is_array($url)) {
$headers = $url;
}
else {
$headers = get_headers($url, 1)['Location'];
if (count($headers) == 0) {
return $url;
}
}
if (is_null($index)) {
$to_check = end($headers);
$index = count($headers) - 1;
}
else {
$to_check = $headers[$index];
}
if (!filter_var($to_check, FILTER_VALIDATE_URL) === false) {
if (count($headers) - 1 > $index) {
$lp = parse_url($headers[$index], PHP_URL_SCHEME) . "://" . parse_url($headers[$index], PHP_URL_HOST) . $headers[$index+1];
}
else {
$lp = $to_check;
}
}
else {
$index--;
$lp = landingpage($headers, $index);
}
return $lp;
}