首页 > 编程语言 >PHP 获取短链等接跳转后的真实地址

PHP 获取短链等接跳转后的真实地址

时间:2022-10-17 15:26:00浏览次数:53  
标签:ch setopt url header PHP 跳转 curl 短链 CURLOPT

//1、用get_headers函数  php自带的get_headers函数可以获取服务器响应一个HTTP请求所发送的所有标头
function get_redirect_url_by_header($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、使用cURL函数
function get_redirect_url_by_curl($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;
}

$headers = get_headers($url, TRUE);
var_dump($headers);

 

标签:ch,setopt,url,header,PHP,跳转,curl,短链,CURLOPT
From: https://www.cnblogs.com/coder404/p/16799293.html

相关文章

  • php 常用工具函数
    返回时间戳差值部分,年、月、日functionget_date_diff($startstamp,$endstamp,$return='m'){$y=date('Y',$endstamp)-date('Y',$startstamp);$m=d......
  • docker安装php-redis扩展
    使用docker安装的PHP-Redis扩展,需要安装一下扩展。首先进入docker的php容器$dockerexec-itphp /bin/bash依次执行下列命令$curl-L-o/tmp/redis.tar......
  • PHP执行代码的步骤
    1.Scanning(Lexing),将PHP代码转换为语言片段(Tokens)2.Parsing,将Tokens转换成简单而有意义的表达式3.Compilation,将表达式编译成Opocdes4.Execution,顺次执行Opc......
  • PHP 字符串限制字数和获取字符串字数
    一、截取限制字数:mb_substr()mb_substr($str,$start,$length,$encoding)$str,需要截断的字符串$start,截断开始处,起始处为0$length,要截取的字数$encoding,网页编......
  • 路由导航有哪几种?怎么跳转传参
    1.声明式导航 目标:可用全局组件router-link来替代a标签;总结:链接导航,用router-link配合to,实现点击切换路由;特点:vue-router提供了一个全局组件router-link......
  • PHP 存在不受控制的递归漏洞
    PHP存在不受控制的递归漏洞在PHP受影响版本内,phar解压缩器代码将递归解压缩“quines”gzip文件,从而导致无限循环。攻击者会利用此漏洞导致服务器资源耗尽。影响......
  • PHP的json_encode失败的问题
    后端收到数据时,exif_read_data可以正常读取到返回数组的Orientation值,但是imagerotate()操作就是无效。然后在写log时,发现用json_encode(exif_read_data($file_path......
  • thinkphp5 如何查询 以逗号间隔的数据
    例如1,2,3,4之类的id或者其他组成的数值字符串存入字段中,然后会有查询的需求,例如我们需要查询包含1的所有的数据,这时我们可以使用find_in_set()函数;$id=4;Db::name('men......
  • JSP的静动态包含,四大域对象,JSP页面跳转
    JSP1、注释:1)显示注释能够在客户端查看的注释:继承html注释<!--HTML注释-->2)隐式注释不能在客户端查看:JSP注释<%--JSP注释--%>java......
  • php扩展 rabbitmq
    <?php//建立TCP连接对象$connection=newAMQPConnection(['host'=>'127.0.0.1','port'=>'5672','vhost'=>'/','login'=>'guest','......