问题前言
这是我自己用的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或者疑问欢迎各路大神补充&指正
这个逼装的我给82分,剩下的用666的方式打给你!