php远程请求CURL案例(爬虫、保存登录状态)

php远程请求CURL案例(爬虫、保存登录状态),第1张

概述GET案例/** * curl_get * @param $url * @param null $param * @param null $options * @return array */function curl_get($url, $param = null, $options = null){    $defaultOptions = array(        'timeout'        GET案例
/** * curl_get * @param $url * @param null $param * @param null $options * @return array */function curl_get($url, $param = null, $options = null){    $defaultoptions = array(        'timeout'               => 30, // 超时时间(秒)        // header(请求头)          Array|String            推荐使用数组        // 参数格式1(数组):        //      array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')        // 参数格式2(字符串):        //      $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36";        'header'                => [],        'get_header'            => false, // 是否返回请求头,默认false        // 请求头里的cookie(字符串)  String             直接复制浏览器请求头里set-cookie即可        'cookie'                => '',        // cookiePath              String              cookie文件路径,需要可读写权限        'cookie_file'           => '',        // 是否启动跟踪,重定向页面是否跟随跳转        'followlocation'        => 0,        // 禁止服务器端的验证ssl        'ssl'                   => 0,        // 伪装请求来源,绕过防盗        'referer'               => null    );    // 处理默认值    foreach ($defaultoptions as $key => $item) {        if(!isset($options[$key])){            $options[$key] = $item;        }    }    $result = array(        'code'      => 0,        'msg'       => 'success',        'body'      => ''    );    if (is_array($param)) {        $param = http_build_query($param);    }    $url = strstr($url,'?')? trim($url,'&').'&'.$param: $url.'?'.$param;    $ch = curl_init(); // curl初始化    curl_setopt($ch, CURLOPT_URL, $url); // 设置url    // 判断&设置超时    !empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);    // 判断&设置请求头    if (!empty($options['header'])) {        if (is_string($options['header'])) {            $header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串            $header = explode('__SLONG__', $header); // 通过特定字符串分割成数组            $options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组        }        curl_setopt($ch, CURLOPT_httpheader, $options['header']);    }    // cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来    //,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去    //, 并在有新cookie更新时写入到文件里    if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {    	// 自动同步更新        curl_setopt($ch, CURLOPT_cookiefile, $options['cookie_file']);        curl_setopt($ch, CURLOPT_cookieJAR, $options['cookie_file']);    } elseif (!empty($options['cookie'])) {    	// 固定cookie        curl_setopt($ch, CURLOPT_cookie, $options['cookie']);    }    // 是否跟踪(重定向页面是否继续抓取)    !empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FolLOWLOCATION, $options['followlocation']);    // 禁止服务器端的验证ssl    empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']);    //伪装请求来源,绕过防盗    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);    curl_setopt($ch, CURLOPT_ENCoding, 'gzip,deflate'); //curl解压gzip页面内容    curl_setopt($ch, CURLOPT_header, 0);// 不获取请求头    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面    // 设置预设之外的参数    if (count($options) != count($defaultoptions)) {        foreach ($options as $key => $item) {            if (!isset($defaultoptions[$key])) {                curl_setopt($ch, $key, $item);            }        }    }    //执行并获取内容    $output = curl_exec($ch);    //对获取到的内容进行 *** 作    if ($output === false) {        $result['code'] = 1; // 错误        $result['msg'] = "CURL Error:".curl_error($ch);    } else {        if ($options['get_header']) {            // 获得响应结果里的:头大小            $headerSize = curl_getinfo($ch, CURliNFO_header_SIZE);            // 根据头大小去获取头信息内容            $result['header'] = substr($output, 0, $headerSize);            $result['body'] = substr($output, $headerSize);        }else{            $result['body'] = $output;        }    }    //释放curl句柄    curl_close($ch);    return $result;}
POST案例
/** * curl_post * @param $url              请求地址 * @param null $param       get参数 * @param array $options    配置参数 * @return array */function curl_post($url, $param = null, $options = array()){    $defaultoptions = array(        'timeout'               => 30, // 超时时间(秒)        // header(请求头)          Array|String            推荐使用数组        // 参数格式1(数组):        //      array('Content-type: text/plain', 'User-Agent: Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36')        // 参数格式2(字符串):        //      $header = "Content-type: text/plain \n User-Agent: Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36";        'header'                => [],        'get_header'            => false, // 是否返回请求头,默认false        // 请求头里的cookie(字符串)  String             直接复制浏览器请求头里set-cookie即可        'cookie'                => '',        // cookiePath              String              cookie文件路径,需要可读写权限        'cookie_file'           => '',        // 是否启动跟踪,重定向页面是否跟随跳转        'followlocation'        => 0,        // 禁止服务器端的验证ssl        'ssl'                   => 0,        // 伪装请求来源,绕过防盗        'referer'               => null    );    // 处理默认值    foreach ($defaultoptions as $key => $item) {        if (!isset($options[$key])) {            $options[$key] = $item;        }    }    $result = array(        'code'      => 0,        'msg'       => 'success',        'body'      => ''    );    if (is_array($param)) {        $param = http_build_query($param);    }    $ch = curl_init(); // curl初始化    curl_setopt($ch, CURLOPT_URL, $url); // 设置url    curl_setopt($ch, CURLOPT_POST, true);    curl_setopt($ch, CURLOPT_POSTFIELDS, $param);    // 判断&设置超时    !empty($options['timeout']) && curl_setopt($ch, CURLOPT_TIMEOUT, $options['timeout']);    // 判断&设置请求头    if (!empty($options['header'])) {        if (is_string($options['header'])) {            $header = str_replace(array("\r\n", "\r", "\n"), "__SLONG__", $options['header']); // 将换行符转换为特定字符串            $header = explode('__SLONG__', $header); // 通过特定字符串分割成数组            $options['header'] = array_values(array_filter($header)); // 去除空元素,重组数组        }        curl_setopt($ch, CURLOPT_httpheader, $options['header']);    }    // cookie,如果要保持自动更新cookie的话只能用cookie_file文件路径方式来    //,curl会自己读取cookie_file路径的文件转为cookie在连接时自己带过去    //, 并在有新cookie更新时写入到文件里    if (!empty($options['cookie_file']) && file_exists($options['cookie_file'])) {    	// 自动同步更新        curl_setopt($ch, CURLOPT_cookiefile, $options['cookie_file']);        curl_setopt($ch, CURLOPT_cookieJAR, $options['cookie_file']);    } elseif (!empty($options['cookie'])) {    	// 固定cookie        curl_setopt($ch, CURLOPT_cookie, $options['cookie']);    }    // 是否跟踪(重定向页面是否继续抓取)    !empty($options['followlocation']) && curl_setopt($ch, CURLOPT_FolLOWLOCATION, $options['followlocation']);    // 禁止服务器端的验证ssl    empty($options['ssl']) && curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $options['ssl']);    //伪装请求来源,绕过防盗    !empty($options['referer']) && curl_setopt($ch, CURLOPT_REFERER, $options['referer']);    curl_setopt($ch, CURLOPT_ENCoding, 'gzip,deflate'); //curl解压gzip页面内容    curl_setopt($ch, CURLOPT_header, 0);// 不获取请求头    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 输出转移,不输出页面    // 设置预设之外的参数    if (count($options) != count($defaultoptions)) {        foreach ($options as $key => $item) {            if (!isset($defaultoptions[$key])) {                curl_setopt($ch, $key, $item);            }        }    }    //执行并获取内容    $output = curl_exec($ch);    //对获取到的内容进行 *** 作    if ($output === false) {        $result['code'] = 1; // 错误        $result['msg'] = "CURL Error:".curl_error($ch);    } else {        if ($options['get_header']) {            // 获得响应结果里的:头大小            $headerSize = curl_getinfo($ch, CURliNFO_header_SIZE);            // 根据头大小去获取头信息内容            $result['header'] = substr($output, 0, $headerSize);            $result['body'] = substr($output, $headerSize);        } else {            $result['body'] = $output;        }    }    //释放curl句柄    curl_close($ch);    return $result;}

其他请求类型请自己参考封装处理

总结

以上是内存溢出为你收集整理的php远程请求CURL案例(爬虫保存登录状态)全部内容,希望文章能够帮你解决php远程请求CURL案例(爬虫、保存登录状态)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存