【旧代码整理】分享带cookie的PHP Curl操作class,再简单说说curl配合socks5代理、IP变身

 这是一个简单的php curl操作class。
 它模拟成了chrome agent,能保存cookie到文件。
 能带上cookie、通过socks5代理进行GET、POST操作。
 

 服务器端会认为这是一个chrome浏览器。


 代码如下:
<?php
/*
* 调用方式:$curl = Model_Curl::instance();
* $curl->get(....);
* $curl->get_file(....);
* $curl->post(....);
*/
class Model_Curl {
	protected static $_instance = null;

	public static function instance(){
		if(self::$_instance == null){
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	
	public $agent = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36';
	public $accept = 'application/json, text/javascript, */*; q=0.01';
	
	public $accept_language = 'zh-CN,zh;q=0.8,en;q=0.6';
	public $accept_encoding = 'gzip, deflate';
	public $connection = 'keep-alive';
	public $content_type = 'application/x-www-form-urlencoded; charset=UTF-8';
	
	public $cookie_file = null;
	
	/* 
	* 参数说明:
	* $url 网址,
	* $referer 来源网址 如客户端从 http://www.domain.com/login 跳转到了 http://www.domain.com/home,
	* 那么,$referer 就是  http://www.domain.com/login 
	* $timeout 告诉curl多久超时停止,
	* $header_params 自定义agent等header信息类型,一般用不到
	*/
	public function get($url,$referer='',$timeout=10,array $header_params=null){

		$return = array();
		
		$cont=curl_init($url);//创建要跳转的URL
		
		if(!empty($GLOBALS['CURL_S5_PROXY'])){
		echo '*';
		curl_setopt($cont,CURLOPT_PROXY,$GLOBALS['CURL_S5_PROXY']);
		curl_setopt($cont, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		}
		curl_setopt($cont,CURLOPT_TIMEOUT,$timeout);
		curl_setopt($cont,CURLOPT_HEADER,0);//返回头部
		curl_setopt($cont,CURLOPT_RETURNTRANSFER,1);//返回信息并显示

		$cookie_file = $this->cookie_file;
		
		if(!empty($cookie_file)){
			curl_setopt($cont,CURLOPT_COOKIEFILE,$cookie_file);//调用已经存在的COOKIE文件
			curl_setopt($cont,CURLOPT_COOKIEJAR,$cookie_file);//返回COOKIE文件放到临时文件
		}

		curl_setopt($cont,CURLOPT_ENCODING,$this->accept_encoding);
		curl_setopt($cont,CURLOPT_USERAGENT,$this->agent);

		if(!empty($referer)){
			curl_setopt($cont,CURLOPT_REFERER, $referer);
		}

		curl_setopt($cont,CURLOPT_FOLLOWLOCATION,1);
		
		$header = array();
		//$header[] = 'Accept:*/*';
		$header[] = 'Accept:'.$this->accept;
		$header[] = 'Connection:'.$this->connection;
		$header[] = 'Accept-Language:'.$this->accept_language;
		$header[] = 'Cache-Control:max-age=0';
		$header[] = 'Content-Type:'.$this->content_type;;

		if(!empty($header_params)){
			$header = array_merge($header,$header_params);
		}

		curl_setopt($cont, CURLOPT_HTTPHEADER, $header);

		$contes=curl_exec($cont);//执行已经定义的设置

		$errno = curl_errno($cont);

		$return['data'] = $contes;
		
		$return['errno'] = $errno;

		return $return;
	}
	/* 
	* 参数说明:
	* $url 网址,$file_path 抓来的文件放的目录(不带/),
	* $filename 抓来的文件存储名字,
	* $timeout 告诉curl多久超时停止,
	* $header_params 自定义agent等header信息类型,一般用不到
	*/
	public function get_file($url,$file_path,$filename,$timeout=10,array $header_params=null){
		
		createDir($file_path);

		$filename = $file_path .'/'. $filename;

		$cont=curl_init($url);

		if(!empty($GLOBALS['CURL_S5_PROXY'])){
		echo '*';
		curl_setopt($cont,CURLOPT_PROXY,$GLOBALS['CURL_S5_PROXY']);
		curl_setopt($cont, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		}

		curl_setopt($cont,CURLOPT_TIMEOUT,$timeout);
		//curl_setopt($cont,CURLOPT_FILE,$file);
		curl_setopt($cont,CURLOPT_HEADER,0);//返回头部
		curl_setopt($cont,CURLOPT_RETURNTRANSFER,1);//返回信息并显示
		
		$cookie_file = $this->cookie_file;
		
		if(!empty($cookie_file)){
			curl_setopt($cont,CURLOPT_COOKIEFILE,$cookie_file);//调用已经存在的COOKIE文件
			curl_setopt($cont,CURLOPT_COOKIEJAR,$cookie_file);//返回COOKIE文件放到临时文件
		}
		
		curl_setopt($cont,CURLOPT_ENCODING,$this->accept_encoding);
		curl_setopt($cont,CURLOPT_USERAGENT,$this->agent);

		curl_setopt($cont,CURLOPT_AUTOREFERER,true);
		curl_setopt($cont,CURLOPT_FOLLOWLOCATION,true);

		$header = array();
		$header[] = 'Accept:'.$this->accept;
		$header[] = 'Connection:'.$this->connection;
		$header[] = 'Accept-Language:'.$this->accept_language;
		$header[] = 'Cache-Control:max-age=0';
		$header[] = 'Content-Type:'.$this->content_type;;

		curl_setopt($cont, CURLOPT_HTTPHEADER, $header); 

		$contes=curl_exec($cont);//执行已经定义的设置

		file_put_contents($filename,$contes);

		$errno = curl_errno($cont);

		if(!empty($errno)){
			//echo "curl_errno:{$errno}\n";
			return array('curl_errno'=>$errno);
		}

		curl_close($cont);
	
	}
	/* 
	* 参数说明:
	* $url 网址,$form array数组例如array('username'=>'john','passord'=>'123456'),
	* $referer 来源网址 如客户端从 http://www.domain.com/login 跳转到了 http://www.domain.com/home,
	* 那么,$referer 就是  http://www.domain.com/login 
	* $timeout 告诉curl多久超时停止,
	* $header_params 自定义agent等header信息类型,一般用不到
	*/
	public function post($url,$form,$referer='',$timeout=10,array $header_params=null){
		
		if(is_array($form)){
		
			$post = http_build_query($form);

		}
		else{
			echo "post str custom\n";
			$post = $form;
		}
		

		$cont=curl_init($url);//创建要跳转的URL
		if(!empty($GLOBALS['CURL_S5_PROXY'])){
		echo '*';
		curl_setopt($cont,CURLOPT_PROXY,$GLOBALS['CURL_S5_PROXY']);
		curl_setopt($cont, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		}
		curl_setopt($cont,CURLOPT_TIMEOUT,$timeout);
		curl_setopt($cont,CURLOPT_HEADER,0);//返回头部
		curl_setopt($cont,CURLOPT_POST,1);//设置POST提交
		curl_setopt($cont,CURLOPT_RETURNTRANSFER,1);//返回信息并显示
		
		$cookie_file = $this->cookie_file;
		
		if(!empty($cookie_file)){
			curl_setopt($cont,CURLOPT_COOKIEFILE,$cookie_file);//调用已经存在的COOKIE文件
			curl_setopt($cont,CURLOPT_COOKIEJAR,$cookie_file);//返回COOKIE文件放到临时文件
		}
		
		curl_setopt($cont,CURLOPT_POSTFIELDS,$post);//提交POST数据

		if(!empty($referer)){
			curl_setopt($cont,CURLOPT_REFERER, $referer);
		}

		curl_setopt($cont,CURLOPT_FOLLOWLOCATION,1);
		
		$header = array();
		//$header[] = 'Accept:*/*';
		$header[] = 'Accept:'.$this->accept;
		$header[] = 'Connection:'.$this->connection;
		$header[] = 'Accept-Language:'.$this->accept_language;
		$header[] = 'Cache-Control:max-age=0';
		$header[] = 'Content-Type:'.$this->content_type;;
		if(!empty($header_params)){
			$header = array_merge($header,$header_params);
		}

		curl_setopt($cont, CURLOPT_HTTPHEADER, $header);

		$contes=curl_exec($cont);//执行已经定义的设置

		$errno = curl_errno($cont);
			
		curl_close($cont);
	
		$return = array();

		$return['data'] = $contes;
		
		$return['errno'] = $errno;

		return $return;		
	}
}



当全局变量 $GLOBALS['CURL_S5_PROXY'] 不为空时,该curl自动通过配置的s5代理操作。

举个栗子:

<?php
//声明全局变量 
$CURL_S5_PROXY = ‘username:password@111.222.111.222:1080’

那么curl通过用户名为username,密码为password,地址为111.222.111.222,端口为1080的s5代理进行操作。

这样对方服务器就认为你的IP是111.222.111.222。


当要保存服务器端传过来的cookie,然后下一步操作要带上cookie时,需要设置 $curl->cookie_file=''cookie文件路径;

如这样:

<?php
$curl->cookie_file = ROOT_PATH . '/cookie/c001.ck'


$curl->get   相当于浏览器查看网页;

$curl->get_file 相当于浏览器下载图片、文件等;

$curl->post  相当于浏览器发贴、注册等情况下提交的form;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值