一个简单的增强型PHP curl函数
啥都不说,先上代码
<?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函数的更多相关文章
- 一个简单的js实现倒计时函数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 一个带重试次数的curl 函数
<?php/** * [curl 带重试次数] * @param [type] $url [访问的url] * @param [type] $post [$POST参数] * @param in ...
- 一个简单的金额平均分配函数(C#版)
//总金额平均分配给总人数 //参数说明:总金额,总人数,最大金额为平均金额的倍率 public double[] GetList(double zje,int zrs,int max) { doub ...
- 一个简单的创建dom的函数
var regName = /^(div|a|p|ul|li|input|select|document|body|iframe)$/;function createDom(name, obj) { ...
- python -----一个简单的小程序(监控电脑内存,cpu,硬盘)
一个简单的小程序 用函数实现!~~ 实现: cpu 使用率大于百分之50 时 , C 盘容量不足5 G 时, 内存 低于2G 时. 出现以上其中一种情况,发送自动报警邮件! 主要运用 到了两个 模 ...
- 创建一个简单的terraform module
terraform module可以实现代码的复用,同时方便分享,下面创建一个简单的基于localfile && template provider 的module module ...
- 简单实用的php分页函数代码
一个简单实用的php分页函数,分页导航中可以默认为空,在函数内部再设置本页URL. 代码: <?php /** * 分页 * @category 功能 * @param $totle:信息总数 ...
- js new一个对象的过程,实现一个简单的new方法
对于大部分前端开发者而言,new一个构造函数或类得到对应实例,是非常普遍的操作了.下面的例子中分别通过构造函数与class类实现了一个简单的创建实例的过程. // ES5构造函数 let Parent ...
- 用一个简单的例子来理解python高阶函数
============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...
随机推荐
- 使用Spring框架入门二:基于注解+XML配置的IOC/DI的使用
一.简述 本文主要讲使用注解+xml配合使用的几种使用方式.基础课程请看前一节. 二.步骤 1.为Pom.xml中引入依赖:本例中使用的是spring-context包,引入此包时系统会自动导入它的依 ...
- jstat 使用日志
如何判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序. Jstat是JDK自带的一个 ...
- 算法笔记_199:第二届蓝桥杯软件类决赛真题(C语言本科)
前言:以下代码部分仅供参考,C语言解答部分全部来自网友,Java语言部分部分参考自网友,对于答案的正确性不能完全保证. 试题1 数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示. ...
- ES6学习笔记五:Promise异步任务
一:Promise对象 Promise对象代表一个异步操作,有三种状态:Pending(进行中).Resolved(已完成,又称 Fulfilled)和Rejected(已失败). 二:创建与使用 v ...
- Linux下找不到动态链接库(转)
1.生成静态库 生成静态库使用ar工具,其实ar是archive的意思 $ar cqs libhello.a hello.o 2.生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: ...
- 〖Android〗联想K860 logcat CM11.0出错信息及解决
错误1: D/gpsd ( ): main() D/gpsd ( ): argv[] = '/system/bin/glgps' D/gpsd ( ): argv[] = '-c' D/gpsd ( ...
- 【Linux】循环控制及状态返回值break、continue、exit、return
一.break.continue.exit.return的区别和对比 break n :如果省略n,则表示跳出整个循环,n表示跳出循环的层数 continue n:如果省略n,则表示跳过本次循 ...
- AVERAGE和averageif函数
1.AVERAGE(Number1,Number2……) 其中: Number1,number2,...是要计算平均值的 1-30 个参数. 注意事项: average函数的参数可以是一个,也可以是多 ...
- html 5检查Mobile App是否在线
在PhoneGap应用,或者黑莓Java/HTML混搭应用中,如何使用JavaScript检查Mobile App网络连接状态呢? <script type="text/javascr ...
- Mysql 将结果保存到文件 从文件里运行sql语句 记录操作过程(tee 命令的使用)
1. 有时候我们可能须要记录我们对mysql的操作过程,这时我们能够使用mysql的tee命令 1)第一种情况是在链接数据库的时候使用tee >mysql -u root -p --te ...