zoukankan      html  css  js  c++  java
  • 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就能看到 你获取到的数据了。

  • 相关阅读:
    [I cannot be cast to java.lang.Comparable
    关于有参构造的调用问题
    方法中的参数问题
    mybatis中xml的sql语句传入参数的不同用的#{}中的参数也不相同
    javaweb中向集合中添加对象报空指针异常问题的可能原因
    找不到log4j类的问题可能的原因
    快速失败和安全失败(别人写的,摘抄过来了)
    自动生成的列在xml中写sql代码插入时不写入,但是其余属性要都列出来
    JQ高级
    JQ初级
  • 原文地址:https://www.cnblogs.com/HoverM/p/9259278.html
Copyright © 2011-2022 走看看