啥都不说,先上代码

<?PHP
/*
  *  @author  小伍
  */
echo "<pre>";
$proxy = array('url'=>'http://localhost:8087');
print_r(xCurl('http://www.cnblogs.com/picaso',true,array(),null,null,$proxy)); function xCurl($url,$return=true,$postData=array(),$cookiePath=null,$referer=null,$proxy=array(),$userAgent="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)") {
$ch = curl_init();
$optionArray = array(
CURLOPT_AUTOREFERER => true,
CURLOPT_URL => $url,  //目标URL
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,  //不直接打印显示
CURLOPT_CONNECTTIMEOUT => 3,  //连接超时3s
CURLOPT_TIMEOUT => 12,      //执行超时12s
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false  //此处两个SSL相关参数是适应HTTPS网页
);
if(count($proxy) > 0){  //网页代理设置,代理,大家都懂的,可以做很多事
$optionArray[CURLOPT_HTTPPROXYTUNNEL] = true;  //HTTP代理开关
if(!empty($proxy['type']) && $proxy['type'] == 'socket'){
$optionArray[CURLOPT_PROXYTYPE] = CURLPROXY_SOCKS5;  //可以使用socket代理(×这里我没有测试socket代理)
}
$optionArray[CURLOPT_PROXY] = $proxy['url'];if (!empty($proxy['auth'])) {              //代理验证
$optionArray[CURLOPT_PROXYAUTH] = false;$optionArray[CURLOPT_PROXYUSERPWD] = $proxy['auth'];  //格式 username:password
} }
if(!empty($referer)) {    //HTTP头部的referer
$optionArray[CURLOPT_REFERER] = $referer;
}
if(!empty($userAgent)) {    //HTTP头部的UserAgent
$optionArray[CURLOPT_USERAGENT] = $userAgent;
}
if (!empty($cookiePath)) {    //Cookie的保存与传递(cookiePath是一个cookie文件,自定义即可)
$optionArray[CURLOPT_COOKIEFILE] = $cookiePath;  //传递cookie
$optionArray[CURLOPT_COOKIEJAR] = $cookiePath;  //保存cookie
}
if(count($postData) > 0){    //post传值
$optionArray[CURLOPT_POST] = 1;
$optionArray[CURLOPT_POSTFIELDS] = $postData;
}
curl_setopt_array($ch, $optionArray);
$content = curl_exec($ch);
if(!curl_errno($ch)){
$output = curl_getinfo($ch);
}
curl_close($ch);
if($return) {
$output['content'] = $content;
return $output;
} else {
echo $content;
}
} ?>

1、简介:

  能够抓取HTTP和HTTPS页面;

  能够记录、使用cookie;

  能够使用HTTP代理(socket代理可以使用,效果未检测),支持代理验证;

  可以自定义Referer、UserAgent;

   检查链路信息,包含状态码等(返回结果数组详见curl_getinfo函数数据解释)

2、用途:

  换IP作业:邮件群发,注册帐号,发布软文等;

  接口处理:API接口处理(可以精简本代码);

  网页采集:太不道德了

3、扩展功能:

  CURL也可以伪造IP,别干坏事哦~~

  curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));

4、用法:

  会调用函数就会使用,So easy~

只是一函数而已,参数显得很乱,有兴趣可以改写成class类

一个简单的增强型PHP curl函数的更多相关文章

  1. 一个简单的js实现倒计时函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 一个带重试次数的curl 函数

    <?php/** * [curl 带重试次数] * @param [type] $url [访问的url] * @param [type] $post [$POST参数] * @param in ...

  3. 一个简单的金额平均分配函数(C#版)

    //总金额平均分配给总人数 //参数说明:总金额,总人数,最大金额为平均金额的倍率 public double[] GetList(double zje,int zrs,int max) { doub ...

  4. 一个简单的创建dom的函数

    var  regName = /^(div|a|p|ul|li|input|select|document|body|iframe)$/;function createDom(name, obj) { ...

  5. python -----一个简单的小程序(监控电脑内存,cpu,硬盘)

    一个简单的小程序 用函数实现!~~ 实现: cpu 使用率大于百分之50 时  ,  C 盘容量不足5 G 时, 内存 低于2G 时. 出现以上其中一种情况,发送自动报警邮件! 主要运用 到了两个 模 ...

  6. 创建一个简单的terraform module

      terraform module可以实现代码的复用,同时方便分享,下面创建一个简单的基于localfile && template provider 的module module ...

  7. 简单实用的php分页函数代码

    一个简单实用的php分页函数,分页导航中可以默认为空,在函数内部再设置本页URL. 代码: <?php /** * 分页 * @category 功能 * @param $totle:信息总数 ...

  8. js new一个对象的过程,实现一个简单的new方法

    对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...

  9. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

随机推荐

  1. Maven项目继承与聚合

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628534.html  一:继承 在Java编程中,如果多个类都使用到了相同的内容.方法时,我们可以用继承的方 ...

  2. PCI(Payment Card Industry)合规

     PCI-DSS(Payment Card Industry-Data Security Standard) 1.构建并维护安全的网络 2.保护持卡人数据 3.维护漏洞管理程序 4.执行严格的访问控制 ...

  3. 使用springMVC和Jquery实现JSONP

    JSONP这个东东是啥我就不写了,直接贴实现的代码 JAVA代码: /** * * 查询用户是否已经提交认证获取已经是认证会员 * * 使用spring mvc的直接返回string会遇到分号转义后字 ...

  4. 使用MSTSC远程登录时提示证书无效的解决方法

    On your local machine Open Windows command prompt type: gpedit.msc -> Press Enter -> a new win ...

  5. Tomcat默认界面可导致版本信息泄露+管理后台爆破

    由于配置的Tomcat时,管理页面未进行删除或者权限角色配置,攻击者可以通过暴力猜解进入到管理后台,从而上传获取shell. Tomcat的默认工具manager配置,在很多的生产环境中由于基本用不到 ...

  6. ACE的源码划分

    前几篇文章也提到过,ACE的所有源文件和头文件都杂乱堆在了ACE_wrappers/ace目录下.这样的代码组织方式给学习ACE带来了很大的困难,很多朋友在看到ace目录下庞大的代码的时候,几乎就失去 ...

  7. ios中两个view动画切换

    @interface ViewController () @property(nonatomic,retain)UIView *redview; @property(nonatomic,retain) ...

  8. 持续集成工具hudson

     2008-07-08  一.什么是持续集成 持续集成的核心概念 CI 过程会经常构建软件组件:在许多情况下,每当源代码存储库(比如 Subversion 或 ClearCase)中的代码发生变化时, ...

  9. ios实例开发精品文章推荐(8.12)11个处理触摸事件和多点触摸的JS库

    11个处理触摸事件和多点触摸的JS库 触摸屏是现在所有智能手机的标配,还包括各种平板设备,而且很多桌面也慢慢在开始支持触摸操作.要开发支持触摸屏设备的Web应用,我们需要借助浏览器的触摸事件来实现. ...

  10. 编程实践笔记{Java 线程 并发处理 Webservice}(转)

    http://www.cnblogs.com/mingzi/archive/2009/03/09/1406694.html 1, 保证线程安全的三种方法: a, 不要跨线程访问共享变量 b, 使共享变 ...