php的curl封装类
之前一直做爬虫相关的,每次自己去写一系列curl_setopt()函数太繁琐,我于是封装了如下curl请求类。
<?php
/**
* @author freephp
* @date 2015-11-13
*
*/
class MyCurl {
private static $url = ''; // 访问的url
private static $oriUrl = ''; // referer url
private static $data = array(); // 可能发出的数据 post,put
private 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();//初始化curl
curl_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的作用,对返回数据的处理交给其他代码。
php的curl封装类的更多相关文章
- php curl封装类
一个php curl封装的类,减少代码量,简化采集工作.这个类也是我工作的最常用的类之一.这里分享给大家.配合上phpquery,十分好用. <?php namespace iphp\core; ...
- curl 封装类
<?php /** * author: zbseoag * QQ: 617937424 用法: $content = Curl::instance()->url($url)->get ...
- VS2015静态编译libcurl(C++ curl封装类)
一.最新libcurl静态编译教程(curl-7.51版/curl-7.52版) 1.安装perl,在官网下载,安装好以后,测试perl -v是否成功 2.编译openssl(已编译好的下载地址) p ...
- 《CURL技术知识教程》系列分享专栏
<CURL技术知识教程>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201737.html 文章 PHP采集相关教程之一 CUR ...
- CURL PHP模拟浏览器get和post
模拟浏览器get和post数据需要经常用到的类, 在这里收藏了几个不错的方法 方法一 <?php define ( 'IS_PROXY', true ); //是否启用代理 /* cookie文 ...
- PHP 优秀资源汇集(照搬)
文章目录 原文地址: https://shockerli.net/post/php-awesome/ GitHub: https://github.com/shockerli/php-awesome ...
- [php]微信测试号调取acces_token,自定义菜单以及被动响应消息
<?php /**自己写的 */ $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); $wechatObj-> ...
- 跨域、curl、snoopy、file_get_contents()
定义:可以称为”信息采集/模拟登录”技术,可以实现对某个地址做请求,同时按照要求传递get或post参数. curl本身是php的一个扩展,同时也是一个利用URL语法规定来传输文件和数据的工具,支持很 ...
- curl 一个使用例子
#include <iostream> #define Main main #include <string> #include <assert.h> #inclu ...
随机推荐
- Windows,查看进程的连接的IP地址,批量模式,最后做成Excel
1.CMD -> netstat -ano,复制到UltraEdit 2.把双空格替换为单空格,这种替换要进行很多次,直到全部替换完.其次点20次替换就行了. 3.单空格替换为 ^t,也就是制表 ...
- lua迭代器和仿制药for
不管是什么样的结构,你只需要同意遍历集合可以称为迭代器的所有元素.lua常用来形容叙事功能迭代器.个元素.每个迭代器都须要保存一些状态来知道当前处于什么位置和怎样进行下一次迭代. 对于这种任务.闭包提 ...
- Java中间Map List Set和其他收藏品
Map List Set和其他收藏品: 一.概述 在JAVA的util包中有两个全部集合的父接口Collection和Map,它们的父子关系: +Collection 这个接口extends自 --j ...
- Bootstrap Paginator分页插件
Bootstrap Paginator分页插件使用示例 最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页 ...
- 利用PL/SQL Developer工具导出数据到excel,导入excel数据到表
使用PL/SQL Developer工具. 导出: 1.执行select 语句查询出需要导出的数据. 2.在数据列表中右键,选择save results.保存为.csv文件,然后已excel方式打开就 ...
- vs2010下载链接中国简体(中国含msdn)
昨天一个朋友说vs2010中国版可下载,我开始不相信.只是周末.所以,我下载一试 果然,安装了中国版,原本msdn订户才能够下载,感谢朋友们上传. 文件名 cn_visual_studio_2010_ ...
- 软件协作工具Trello
软件协作工具Trellohttps://trello.com/ Q群里conan发了个UE4的RODEMAP的trello链接,感受了一下Trello这款软件协作工具.(https://trello. ...
- GMap.Net
GMap.Net开发之在WinForm和WPF中使用GMap.Net地图插件 GMap.NET是什么? 来看看它的官方说明:GMap.NET is great and Powerful, Free ...
- Twitter算法
算法实践——Twitter算法面试题(积水问题)的线性时间解法 问题描述:在下图里我们有不同高度的挡板.这个图片由一个整数数组所代表,数组中每个数是墙的高度.下图可以表示为数组(2.5.1.2.3 ...
- Excel报表开发(主要讲Excel的导入和导出)
一.Excel数据导入 连接字符串Excel2003版: OleDbConnection conn = new OleDbConnection("provider=Microsoft.Jet ...