PHP 利用curl 模拟get post 请求

有的时候想爬取点数据,但是网站做了防护,用file_get_contents的话,就会提示无法读取。所以得想点其他方法了,所以就想到了利用php 的curl 模拟post或者get请求

首先是模拟get请求(请求https协议接口)

 

  /**
     * 传入json数据进行HTTP Get请求
     *
     * @param string $url $data_string
     * @return string
     */
    public function http_get($url)
    {
          $curl = curl_init(); // 启动一个CURL会话
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
            $tmpInfo = curl_exec($curl);     //返回api的json对象
            //关闭URL请求
            curl_close($curl);
            return $tmpInfo;    //返回json对象
        
    }

然后就是 模拟post请求(https)

/**
     * 传入json数据进行HTTP POST请求
     *
     * @param string $url $data_string
     * @return string
     */
    public static function http_post($url,$data_string,$timeout = 60)
    {
        //curl验证成功
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS,$data_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//// 跳过证书检查 
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($data_string)
        ));
 
        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            print curl_error($ch);
        }
        curl_close($ch);
        return $result;
    }

调用的话 直接就调用就行例如

$url="http://www.baidu.com":

$list=http_get($url);

然后打印下list就能看到 你获取到的数据了。

 

posted @ 2018-07-03 16:29  大白驴  阅读(373)  评论(0编辑  收藏  举报