之前一直做爬虫相关的,每次自己去写一系列curl_setopt()函数太繁琐,我于是封装了如下curl请求类。

<?php
/*** @author freephp* @date 2015-11-13**/
class MyCurl {    private static  $url = ''; // 访问的urlprivate static $oriUrl = ''; // referer urlprivate static $data = array(); // 可能发出的数据 post,putprivate   static $method; // 访问方式,默认是GET请求public static function send($url, $data = array(), $method = 'get') {if (!$url) exit('url can not be null');self::$url = $url;self::$method = $method;$urlArr = parse_url($url);self::$oriUrl = $urlArr['scheme'] .'://'. $urlArr['host'];self::$data = $data;if ( !in_array(self::$method,array('get', 'post', 'put', 'delete'))) {exit('error request method type!');}$func = self::$method . 'Request';return self::$func(self::$url);}/*** 基础发起curl请求函数* @param int $is_post 是否是post请求*/private  function doRequest($is_post = 0) {$ch = curl_init();//初始化curlcurl_setopt($ch, CURLOPT_URL, self::$url);//抓取指定网页curl_setopt($ch, CURLOPT_AUTOREFERER, true);// 来源一定要设置成来自本站curl_setopt($ch, CURLOPT_REFERER, self::$oriUrl);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上if($is_post == 1) curl_setopt($ch, CURLOPT_POST, $is_post);//post提交方式if (!empty(self::$data)) {self::$data = self::dealPostData(self::$data);curl_setopt($ch, CURLOPT_POSTFIELDS, self::$data);}$data = curl_exec($ch);//运行curl    curl_close($ch);return $data;}/*** 发起get请求*/public function getRequest() {return self::doRequest(0);}/*** 发起post请求*/public function postRequest() {return self::doRequest(1);}/*** 处理发起非get请求的传输数据* * @param array $postData*/public function dealPostData($postData) {if (!is_array($postData)) exit('post data should be array');foreach ($postData as $k => $v) {$o .= "$k=" . urlencode($v) . "&";}$postData = substr($o, 0, -1);return $postData;}/*** 发起put请求*/public function putRequest($param) {return self::doRequest(2);}/*** 发起delete请求*/public function deleteRequest($param) {return self::doRequest(3);}}
/* $curl = new MyCurl('http://www.jumei.com',array(), 'get');
$res = $curl->send(); */
$res = MyCurl::send('http://www.ipip.net/ip.html',array('ip' => '61.142.206.145'),'post');var_dump($res);die();

考虑到可能会有循环调用的可能和高并发,为了减少内存堆的不必要消耗,我只对客户端调用提供静态方法。为了类的单一职责,MyCurl只做发请求和返回data的作用,对返回数据的处理交给其他代码。

转载于:https://www.cnblogs.com/freephp/p/4962591.html

php的curl封装类相关推荐

  1. php+cul+post,php curl封装类使用例子_PHP教程

    //curl类 class Curl { function Curl(){ return true; } function execute($method, $url, $fields=", ...

  2. VS2015静态编译libcurl(C++ curl封装类)

    一.最新libcurl静态编译教程(curl-7.51版/curl-7.52版) 1.安装perl,在官网下载,安装好以后,测试perl -v是否成功 2.编译openssl(已编译好的下载地址) p ...

  3. oracle adg switch over,Oracle11gr2_ADG管理之switchover补充

    之前演示的switchver总是提示下面的错误,并且需要人工干预: DGMGRL> switchover to snewtest; Warning: You are no longer conn ...

  4. php get 分页,PHP_codeigniter实现get分页的方法,本文实例讲述了codeigniter实现ge - phpStudy...

    codeigniter实现get分页的方法 本文实例讲述了codeigniter实现get分页的方法.分享给大家供大家参考.具体实现方法如下: public function project_sear ...

  5. PHP 优秀资源汇集(转)

    文章目录 原文地址: https://shockerli.net/post/php-awesome/ GitHub: https://github.com/shockerli/php-awesome ...

  6. php连接ftp实例,PHP_php建立Ftp连接的方法,本文实例讲述了php建立Ftp连接 - phpStudy...

    php建立Ftp连接的方法 本文实例讲述了php建立Ftp连接的方法.分享给大家供大家参考.具体分析如下: 今天看了下ftp函数,总结一下: FTP相关函数: ftp_connect(host,par ...

  7. php http 类,php写的http请求封装类

    本文介绍一个php实现的http请求封装类,封装了三种post提交方法和一个request请求方法,并提供了调用示例,供大家学习参考. 在php编程调试时,经常需要模拟提交. 另外,在抓取一些页面时, ...

  8. curl模拟post请求

    另外可尝试 postman工具 或者用request 直接请求 CURL 发送POST请求curl -header "Content-Type: application/json" ...

  9. 在CentOS 6.8 x86_64上安装nghttp2最新版及让curl具有http2特性

    nghttp2是什么? nghttp2是一个实现IETF官方HTTP/2和HPACK头压缩算法的C库,但不限如此,在C库基础上,还实现了http2的客户端,服务器,代理服务器,以及压测工具.参见官网链 ...

  10. curl: (3) [globbing] error: bad range specification after pos 150的解决方法

    在线上服务器上执行下面的命令 curl -vo /dev/null 'http://120.52.72.46:80/fileshare3010.dfiles.eu/c3pr90ntcsf0/auth- ...

最新文章

  1. 2008php多版本共存,lnmp安装多版本PHP共存的方法详解
  2. spring中controller与jsp之间的那些事儿
  3. Java-Maven(四):Eclipse集成Maven环境配置
  4. python中zip( )的使用
  5. asp.net网站中CrystalReport的简单应用
  6. java 考试复习整理——JAVA类和类成员的修饰符
  7. 看面试题感觉生疏的知识点
  8. java spring orm jbpm_spring整合jbpm4
  9. 数学建模亚太赛优秀论文_泰迪杯数据分析职业技术大赛总结暨亚太地区大学生数学建模经验分享会...
  10. 【前端】书签应用开发总结
  11. aspose.word使用简单方法
  12. 在fc6上安装myeclipse全程记录
  13. python整理表格数据_python --整理数据结构(列表)
  14. jmeter连接mysql并定义变量提供给后续接口使用
  15. 高德地图vs百度地图
  16. 十级解读比特大陆内部信:比特大陆正在走向「詹克团化」
  17. 反函数求导:自然对数 ln是怎么得到的;为什么自然对数的导数是 1/ x;arcsin 和 arccos 的导数求算
  18. 哈工大计算机网络Mooc 第十一章笔记(局域网)
  19. java int格式转换文本_java 文件导出Excel 文本形式转数字格式解决,字段是int导出需求是数字解决方案...
  20. 如何管理一台集群的虚拟机

热门文章

  1. iOS开发之WKWebView的使用以及遇到的问题
  2. win10+Linux双系统安装
  3. Laravel Blade 模板用法
  4. 正在经历变革的 Linux 系统管理员技能
  5. paper 88:人脸检测和识别的Web服务API
  6. c#中Split用法总结
  7. Hadoop启动jobhistoryserver
  8. 一套完整的 Java 线上故障排查技巧,建议收藏!
  9. 阿里面试官必问21 个刁钻的HashMap 面试题,这次让你彻底搞懂
  10. 刷了大量面试题后,我还是被面试官吊打了!