首页
壁纸
留言
挚爱
友链
关于
更多
统计
Search
1
自动化推送每日60S新闻
57 阅读
2
我的开始
51 阅读
3
过来听会歌吧
47 阅读
4
天气每日推送
42 阅读
5
数据结构之队列
35 阅读
自动化
Java
计算机基础知识
数据结构
操作系统
计算机组成原理
计算机网络
typecho
无线电
就爱瞎折腾
其他
树洞
登录
Search
标签搜索
数据结构
自动化
计算机组成原理
树洞
typecho
网易云
音乐
折腾
存储系统
进制转换
编码
数值
MathJax
LaTeX
KaTeX
听歌
队列
青龙面板
冉冉升起的ShallGoing
累计撰写
20
篇文章
累计收到
1
条评论
首页
栏目
自动化
Java
计算机基础知识
数据结构
操作系统
计算机组成原理
计算机网络
typecho
无线电
就爱瞎折腾
其他
树洞
页面
壁纸
留言
挚爱
友链
关于
统计
搜索到
2
篇
标签为
typecho
的文章
2024-08-08
尝试解决typecho的文章未收录但却显示已收录的问题
{alert type="warning"}测试还在进行,还未成功{/alert}分析/* 查询是否收录 已测试 √ */ function _getRecord($self) { $self->response->setStatus(200); site=site = site=self->request->site; $encryption = md5(mt_rand(1655, 100860065) . time()); $baiduSite = "https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isid={$encryption}&wd={$site}&rsv_spt=1&rsv_iqid={$encryption}&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ib&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_btype=i&inputT=3083&rsv_sug4=3220&rsv_sug=9&rsv_sid=32818_1460_33042_33060_31660_33099_33101_32961_26350_22159&_ss=1&clist=&hsug=&f4s=1&csor=38&_cr1=32951"; $ip = mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255); $header[] = "accept-encoding: gzip, deflate"; $header[] = "accept-language: en-US,en;q=0.8"; header[]="CLIENT−IP:".header[] = "CLIENT-IP:" . header[]="CLIENT−IP:".ip; header[]="X−FORWARDED−FOR:".header[] = "X-FORWARDED-FOR:" . header[]="X−FORWARDED−FOR:".ip; $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"; $ch = curl_init(); $ch = curl_init(); curl_setopt(ch,CURLOPTURL,ch, CURLOPT_URL, ch,CURLOPTURL,baiduSite); curl_setopt(ch,CURLOPTHTTPHEADER,ch, CURLOPT_HTTPHEADER, ch,CURLOPTHTTPHEADER,header); curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/s?ie=UTF-8&wd={$site}"); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $output = curl_exec($ch); curl_close($ch); $res = str_replace([' ', "\n", "\r"], '', $output); if (strpos($res, "抱歉,没有找到与") || strpos($res, "找到相关结果约0个") || strpos($res, "没有找到该URL") || strpos($res, "抱歉没有找到")) { $self->response->throwJson(array("data" => "未收录")); } else { $self->response->throwJson(array("data" => "已收录")); } }这段代码是一个用于检查网站是否被百度收录的PHP函数 _getRecord。它通过模拟浏览器请求访问百度搜索页面,并解析返回的HTML内容来判断目标网站是否已经被百度收录。代码详解1. 函数声明和设置响应状态function _getRecord($self) { $self->response->setStatus(200);函数 _getRecord 接收一个参数 $self,通常是一个包含响应和请求相关信息的对象(可能是某个框架中的对象)。setStatus(200) 设置HTTP响应状态码为200,表示请求成功。2. 构造查询URL和请求头 $site = $self->request->site; $encryption = md5(mt_rand(1655, 100860065) . time()); $baiduSite = "https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isid={$encryption}&wd={$site}&rsv_spt=1&rsv_iqid={$encryption}&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=ib&rsv_sug3=2&rsv_sug1=1&rsv_sug7=001&rsv_n=2&rsv_btype=i&inputT=3083&rsv_sug4=3220&rsv_sug=9&rsv_sid=32818_1460_33042_33060_31660_33099_33101_32961_26350_22159&_ss=1&clist=&hsug=&f4s=1&csor=38&_cr1=32951"; $ip = mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255); $header[] = "accept-encoding: gzip, deflate"; $header[] = "accept-language: en-US,en;q=0.8"; $header[] = "CLIENT-IP:" . $ip; $header[] = "X-FORWARDED-FOR:" . $ip; $header[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";$site: 从请求对象 $self->request 中获取用户传递的站点URL,用于查询是否被收录。$encryption: 生成一个随机的MD5加密字符串,用于伪装请求的唯一性。$baiduSite: 拼接百度的查询URL,其中 wd={$site} 用于指定要查询的网站,其他参数用来模拟真实的搜索请求。$ip: 生成一个随机的IP地址,用于伪装请求的来源IP,防止被百度识别为机器请求。$header: 构造请求头,用于模拟真实用户的请求。包括 accept-encoding、accept-language、CLIENT-IP、X-FORWARDED-FOR 等字段。3. 初始化并发送CURL请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $baiduSite); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_REFERER, "https://www.baidu.com/s?ie=UTF-8&wd={$site}"); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $output = curl_exec($ch); curl_close($ch);curl_init(): 初始化CURL会话。curl_setopt($ch, CURLOPT_URL, $baiduSite): 设置CURL请求的URL为百度查询链接。curl_setopt($ch, CURLOPT_HTTPHEADER, $header): 设置请求头,模拟真实请求。curl_setopt($ch, CURLOPT_REFERER, ...): 设置请求的来源页面(即伪装成从百度搜索页面点击进入)。curl_setopt($ch, CURLOPT_USERAGENT, ...): 设置用户代理(浏览器标识),模拟真实用户。curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1): 设置为返回请求结果,而不是直接输出。curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'): 设置CURL自动解压Gzip或Deflate编码的内容。curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE): 禁用SSL证书验证(用于处理HTTPS请求)。curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE): 禁用SSL主机名验证。curl_setopt($ch, CURLOPT_TIMEOUT, 5): 设置请求超时时间为5秒。$output = curl_exec($ch): 执行CURL请求,并将返回的HTML内容赋值给 $output。curl_close($ch): 关闭CURL会话。4. 解析返回结果并判断是否收录 $res = str_replace([' ', "\n", "\r"], '', $output); if (strpos($res, "抱歉,没有找到与") || strpos($res, "找到相关结果约0个") || strpos($res, "没有找到该URL") || strpos($res, "抱歉没有找到")) { $self->response->throwJson(array("data" => "未收录")); } else { $self->response->throwJson(array("data" => "已收录")); } }$res = str_replace([' ', "\n", "\r'], '', $output);: 将返回的HTML内容中的空格、换行符和回车符去除,得到更干净的字符串,方便进行字符串匹配。if (strpos($res, ...) || ...): 检查返回的内容中是否包含以下字符串:"抱歉,没有找到与""找到相关结果约0个""没有找到该URL""抱歉没有找到"这些字符串通常表示百度未收录目标网站。$self->response->throwJson(array("data" => "未收录"));: 如果检测到上述字符串之一,则返回JSON格式的响应,表示网站未被收录。$self->response->throwJson(array("data" => "已收录"));: 否则,返回JSON响应,表示网站已被收录。从调试输出的信息来看,API 返回的内容是一个包含验证码的链接,而不是我们预期的搜索结果。具体的输出是:<a href="https://wappass.baidu.com/static/captcha/tuxing.html?...">Found</a>这个链接指向百度的图形验证码页面,说明百度检测到了我们的请求,并认为这可能是自动化行为,因此要求进行验证码验证。原因分析:百度为了防止滥用或频繁的自动化查询请求,使用了图形验证码来验证请求的真实性。我们的代码通过 cURL 发送请求,但是由于频繁或异常的访问模式,触发了百度的安全机制,导致你获取到的不是搜索结果,而是一个要求验证码验证的页面。解决方案:还没想到,再说吧
2024年08月08日
12 阅读
0 评论
0 点赞
2024-07-28
关于Joe主题在function.php第261行的报错处理
先看一下报错是这样的:首先找到Joe主题的文本位置,然后再打开core文件夹下的function.php文件对第261行进行修改原来报错的代码为:/* 获取父级评论 */ function _getParentReply($parent) { if ($parent !== "0") { $db = Typecho_Db::get(); $commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent)); echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . $commentInfo['author'] . '</div>'; } }我们需要给他修改修改代码如下:/* 获取父级评论 */ function _getParentReply($parent) { if ($parent !== "0") { $db = Typecho_Db::get(); $commentInfo = $db->fetchRow($db->select('author')->from('table.comments')->where('coid = ?', $parent)); if ($commentInfo) { echo '<div class="parent"><span style="vertical-align: 1px;">@</span> ' . htmlspecialchars($commentInfo['author'], ENT_QUOTES, 'UTF-8') . '</div>'; } // 如果查询没有返回结果,则什么也不做 } } 关键点解释:检查数据库操作结果:1.if ($commentInfo):检查 fetchRow 的结果是否为 null。只有在查询成功并且返回了结果时,才会访问 commentInfo['author'] 并输出父级评论。2.不显示未知作者:如果查询没有返回结果,则不输出任何内容。快去试试吧~
2024年07月28日
19 阅读
0 评论
2 点赞