欢迎您来到,李雷博客 | PHP博客        登录  |  注册

PHP模拟浏览器请求(解决谷歌广告不显示的问题)

更新:2023-05-08 09:53:32
人气:909
来源:本站原创
A+

问题来源:为了一点点收入挂了谷歌广告联盟的广告Google AdSense,但是新发布文章会出现很长一段时间都无法加载广告的情况,使得广告展现率很低也很影响收入。经过查询大概情况是谷歌要在页面被访问后才能分析出来适合匹配的广告,如果这样的话每次第一个访问者来访问都会造成广告不能显示,我就想着能不能在自己博客发布完文章后自己触发程序将这一批的文章都模拟浏览器请求访问一次并停留一段时间。

考虑两个方案:1、用curl模拟访问   2、用框架页动态加载,这次先用curl测试一下效果,相关代码记录如下:

PHP模拟浏览器请求(解决谷歌广告不显示的问题)

<?
class Request
{
    private $curl;
    private $query = '';
    private $user_agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Mobile Safari/537.36';

    public function __construct()
    {
        $this->curl = curl_init(); // 初始化
    }

    public function request($url, $data = [], $type = 'GET')
    {
        $ret = '';

        switch ($type) {

            case 'GET';
                $ret = $this->get($url, $data);
                break;

            case 'POST';
                $ret = $this->post($url, $data);
                break;

        }

        return $ret;
    }

    // 模拟浏览器get请求
    public function get($url, $data)
    {
        if ($data) {
            foreach ($data as $key => $value) {
                $this->query .= $key . '=' . $value;
            }

            $url .= '?' . $this->query;
        }

        curl_setopt($this->curl, CURLOPT_PROXY, $GLOBALS ['proxy']);//代理服务器地址
        curl_setopt($this->curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
        curl_setopt($this->curl, CURLOPT_USERAGENT, $this->user_agent); // 模拟用户使用的浏览器
        @curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($this->curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($this->curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息
        curl_setopt($this->curl, CURLOPT_TIMEOUT, 120); // 设置超时限制防止死循环
        curl_setopt($this->curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($this->curl); // 执行操作

        return $tmpInfo;
    }

    // 模拟浏览器post请求
    public function post($url, $data)
    {
        //代理服务器地址
        curl_setopt($this->curl, CURLOPT_PROXY, $GLOBALS ['proxy']);

        curl_setopt($this->curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
        curl_setopt($this->curl, CURLOPT_USERAGENT, $this->user_agent); // 模拟用户使用的浏览器
        @curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($this->curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($this->curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息
        curl_setopt($this->curl, CURLOPT_TIMEOUT, 120); // 设置超时限制防止死循环
        curl_setopt($this->curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $tmpInfo = curl_exec($this->curl); // 执行操作

        return $tmpInfo;
    }

    public function __destruct()
    {
        //关闭URL请求
        curl_close($this->curl);
    }
}

$request = new Request();
$request->get('https://www.mdaima.com/it/10175.html','');
exit;
?>
推荐的文章
# 发表我的评论
  /     /  
# 最近评论
暂时还没有评论,要不要说点什么?
  Ads by Google
  联系博主
Hello,本博客系统采用PHP和MySql开发,程序开发完全是因为个人爱好,是自己纯手写PHP源代码,未采用任何PHP框架!
QQ:858353007   微信号:lileihot123
网站地图
会员服务
关于我们
QQ:858353007
 
广告服务
加我微信
移动端访问
 
 
Copyright © 2014- 2024 www.mdaima.com All Rights Reserved.
李雷博客,专注PHP经验、PHP教程及PHP源代码开源下载分享的PHP博客!   ICP备案号:京ICP备10202169号-4