• 注册
  • 前端后端 前端后端 关注:336 内容:46

    自己用的curl程序,不断补充更新中..

  • 查看作者
  • 打赏作者
    • 1
    • 年SVIP2
      靓号:9999
      宇宙最帅

      问题前言

      这是我自己用的curl程序,不断补充更新中..

      解决方案

      // 声明类
      class pachong{
      	
      	// 设置请求头信息
      	public function FormatHeader($url){
      		// 解析url
      		$temp = parse_url($url);
      		$query = isset($temp['query']) ? $temp['query'] : '';
      		$path = isset($temp['path']) ? $temp['path'] : '/';
      		$header = array (
      			"POST {$path}?{$query} HTTP/1.1",
      			"Host: {$temp['host']}",
      			"Referer: http://{$temp['host']}/",
      			"Content-Type: text/xml; charset=utf-8",
      			'Accept: application/json, text/javascript, */*; q=0.01',
      			'Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
      			'Connection:keep-alive',
      			'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0',
      			'X-Requested-With: XMLHttpRequest',
      		);
      		return $header;
      	}
      
      	
      	/**
      	 * curl访问请求
      	 * @param $url		str	请求的URL
      	 * @param $post		str	0:关闭 | 数据:(post数据/数组的形式)
      	 * @param $header 	str	0:关闭 | 1:默认头信息 | 自定义:(useragent referer)
      	 * @param $cookie	str	0:关闭 | 路径:(存放cookie文件的绝对路径)
      	 * @param $tiaoshi	str	0:关闭 | 1:开启
      	 * @return $content
      	 */
      	public function curl_url($url,$post=0,$header=0,$cookie=0,$tiaoshi=0){
      		if(!$url){return 'URL不能为空';}
      		if( $header == 1 ){$header = FormatHeader($url);}	// 默认头信息
      		$timeout = 10;										// 默认连接&调用执行最大等待时长(秒)
      		$ch=curl_init();									// 初始化一个cURL对象
      		curl_setopt($ch,CURLOPT_URL, $url);					// 设置你需要抓取的URL
      		if($header){
      		curl_setopt($ch,CURLOPT_HTTPHEADER, $header);		// 设置请求头信息:如 MIME 内容类型 用户代理 及压缩类型
      		}
      
              // 解决卡慢
              curl_setopt($ch,CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);    // 强制协议为1.0
              curl_setopt($ch,CURLOPT_HTTPHEADER, array('Expect: '));          // 头部要送出'Expect: '
              curl_setopt($ch,CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );          // 强制使用IPV4协议解析域名
      
      		// 直接请求头信息里面设置
      		//curl_setopt($ch,CURLOPT_USERAGENT, $useragent);	// 设置用户代理UA(比如可以通过模拟微信的内核访问某个网站)
      		//curl_setopt($ch,CURLOPT_REFERER, $referer);		// 设置请求来路信息
      
      		// 关闭https验证
      		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);		// false:禁止cURL验证对等证书
      		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);		// false:禁止检查证书	
      
      		if($cookie){
      		//curl_setopt($ch, CURLOPT_COOKIE, $cookie);		// 用于发送cookie变量(格式 x=1;y=2 直接设置 适合固定cookie)
      		curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie);		// 读取cookie文件:在当前的会话中读取这个文件里的cookie去访问
      		curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie);		// 写入cookie文件:会话结束时,把新获得的cookie信息保存到文件
      		}
      		
      		if($post){
      		curl_setopt($ch,CURLOPT_POST, 1);					// 发送一个常规的POST请求
      		curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($post));// POST提交的数据包
      		}
      
      		// 调试功能
      		if($tiaoshi){
      		curl_setopt($ch,CURLINFO_HEADER_OUT, true);			// 允许输出请求头信息(true:是"curl_getinfo获取"/false:否)
      		curl_setopt($ch,CURLOPT_HEADER, true); 				// 允许输出响应头信息(true:是"会自动输出到页面"/false:否)
      		}else{
      		curl_setopt($ch,CURLOPT_HEADER, false);
      		}
      		curl_setopt($ch,CURLOPT_NOBODY, false);				// 输出页面的主体内容(true:不输出/false:输出)
      		curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1);  		// 使用自动跳转(抓取跳转后数据)
      		curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, $timeout);	// 建立服务器连接所允许的最长时间(以秒为单位)
      		curl_setopt($ch,CURLOPT_TIMEOUT, $timeout);			// 限制单个cURL扩展功能调用执行的最大时间量 防止死循环(秒)
      		curl_setopt($ch,CURLOPT_MAXREDIRS, 5);				// 设置重定向的跟踪次数最多为5次
      		curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);			// 抓取结果直接返回到字符串中(0:则直接输出内容到页面)
      		//curl_setopt($ch, CURLOPT_ENCODING, "gzip");		// 解析gzip内容
      		$content=curl_exec($ch);							// 运行cURL请求网页
      
      		// 调试功能 https://www.mianshigee.com/note/detail/165992efe/#5-%E8%8E%B7%E5%8F%96%E4%BF%A1%E6%81%AF
      		if($tiaoshi){
      		$info = curl_getinfo($ch);							// curl_getinfo()能够在 cURL 执行后获取请求的有关信息
      		echo "获取 ". $info['url'] . " 耗时 ". $info['total_time'] . " 秒\n\n";
      		$headerStr = curl_getinfo($ch,CURLINFO_HEADER_OUT);	// 获取cURL执行时请求头信息(在curl_exec函数执行后)
      		list($responseStr,$contentStr)=explode("\r\n\r\n",$content,2);
      		echo "请求标头:\n".$headerStr."\n\n";
      		echo "响应标头:\n".$responseStr."\n\n";
      		echo "响应内容:\n".$contentStr."\n\n";
      		curl_close($ch);exit();
      		}
      		
      		// cURL是否有报错
      		if(curl_errno($ch)){
      			echo 'Error:' . curl_error($ch);exit();			// 输出cURL错误反馈
      		}else{
      			return $content;							    // 返回数据
      		}
      		curl_close($ch);								    // 关闭cURL资源,并且释放系统资源
      	}
      }

      使用提示

      请根据自己实际情况做相应修改

      如有什么BUG或者疑问欢迎各路大神补充&指正

      SVIP2

      这个逼装的我给82分,剩下的用666的方式打给你!

      回复

      请登录之后再进行评论

      登录
    • 发布
    • 做任务
    • 实时动态
    • 偏好设置
    • 帖子间隔 侧栏位置: