手机link.php,PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码

这段代码展示了如何使用PHP通过HTTP_USER_AGENT头判断请求是否来自移动设备,并识别浏览器类型。函数is_mobile_request()检查了多种移动设备标识符和WAP特性来确定设备类型。另外,browsers()函数用于识别浏览器版本,主要针对MSIE和Gecko内核的浏览器。
摘要由CSDN通过智能技术生成

有时候很实用在一些场合,留住备用吧

复制代码 代码如下:

function is_mobile_request()

{

$_SERVER["ALL_HTTP"] = isset($_SERVER["ALL_HTTP"]) ? $_SERVER["ALL_HTTP"] : "";

$mobile_browser = "0";

if(preg_match("/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i", strtolower($_SERVER["HTTP_USER_AGENT"])))

$mobile_browser++;

if((isset($_SERVER["HTTP_ACCEPT"])) and (strpos(strtolower($_SERVER["HTTP_ACCEPT"]),"application/vnd.wap.xhtml+xml") !== false))

$mobile_browser++;

if(isset($_SERVER["HTTP_X_WAP_PROFILE"]))

$mobile_browser++;

if(isset($_SERVER["HTTP_PROFILE"]))

$mobile_browser++;

$mobile_ua = strtolower(substr($_SERVER["HTTP_USER_AGENT"],0,4));

$mobile_agents = array(

"w3c ","acs-","alav","alca","amoi","audi","avan","benq","bird","blac",

"blaz","brew","cell","cldc","cmd-","dang","doco","eric","hipt","inno",

"ipaq","java","jigs","kddi","keji","leno","lg-c","lg-d","lg-g","lge-",

"maui","maxo","midp","mits","mmef","mobi","mot-","moto","mwbp","nec-",

"newt","noki","oper","palm","pana","pant","phil","play","port","prox",

"qwap","sage","sams","sany","sch-","sec-","send","seri","sgh-","shar",

"sie-","siem","smal","smar","sony","sph-","symb","t-mo","teli","tim-",

"tosh","tsm-","upg1","upsi","vk-v","voda","wap-","wapa","wapi","wapp",

"wapr","webc","winw","winw","xda","xda-"

);

if(in_array($mobile_ua, $mobile_agents))

$mobile_browser++;

if(strpos(strtolower($_SERVER["ALL_HTTP"]), "operamini") !== false)

$mobile_browser++;

// Pre-final check to reset everything if the user is on Windows

if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "windows") !== false)

$mobile_browser=0;

// But WP7 is also Windows, with a slightly different characteristic

if(strpos(strtolower($_SERVER["HTTP_USER_AGENT"]), "windows phone") !== false)

$mobile_browser++;

if($mobile_browser>0)

return true;

else

return false;

}

文章来源:http://yi1.com.cn/posts/781

php 根据HTTP_USER_AGENT 判断用户浏览器类型

复制代码 代码如下:

function browsers(){

global $HTTP_USER_AGENT ;

if (isset($HTTP_USER_AGENT)){

$sAgent = $HTTP_USER_AGENT;

}else{

$sAgent = $_SERVER["HTTP_USER_AGENT"];

}

if (strpos($sAgent,"MSIE") !== false && strpos($sAgent,"mac") === false && strpos($sAgent,"Opera") === false){

$iVersion = (float)substr($sAgent,strpos($sAgent,"MSIE") + 5,3);

return ($iVersion >= 5.5) ;

}else if (strpos($sAgent,"Gecko/") !== false){

$iVersion = (int)substr($sAgent,strpos($sAgent,"Gecko/") + 6,8);

return ($iVersion >= 20030210) ;

}else{

return false;

}

}

这段代码可能会报错因为: 1. 请求 `https://www.9tata.cc/play/14999-1-0.html` 返回的内容可能没有符合正则表达式 `'now="(.*?m3u8)"'` 的内容,导致 `re.search` 函数返回 `None`,再调用 `.group(1)` 方法就会抛出 AttributeError。 2. 在注释 (2) ,由于 `res.text.split("\n")[2]` 可能不存在,因此会抛出 IndexError。 3. 如果在注释 (2) 成功获取到 `m3u8_detail_link`,由于该链接是相对链接,需要使用 `urllib.parse.urljoin` 函数将其与 `os.path.dirname(m3u8_link)` 拼接起来才能得到完整链接。 4. 在注释 (3) ,使用了 `requests.get` 函数而不是之前创建的 `session.get` 方法,这意味着没有传递之前设置的 headers 和 cookies,可能会导致请求失败。 要解决这些问题,可以按照下面的方式修改代码: ```python import requests import re import os from urllib.parse import urljoin session = requests.Session() url = "https://www.9tata.cc/play/14999-1-0.html" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' } # (1) 爬取m3u8文件的链接 res = session.get(url, headers=headers, verify=False) m3u8_match = re.search(r'now="(.*?m3u8)"', res.text) if m3u8_match: m3u8_link = m3u8_match.group(1) print(m3u8_link) # (2) 爬取m3u8文件 res = session.get(m3u8_link) if res.ok: m3u8_detail_link = urljoin(os.path.dirname(m3u8_link), res.text.split("\n")[2]) print(m3u8_detail_link) # (3) 爬取m3u8具体文件 res = session.get(m3u8_detail_link) if res.ok: print(res.text) else: print("Failed to get m3u8_detail_link") else: print("Failed to get m3u8_link") else: print("Failed to find m3u8_link") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值