function get($url, $data = []){
$ch = curl_init($url); //初始化
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//代理 通过代理访问需要额外添加的参数项, 127.0.0.1:8080本地ssr代理
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1");
curl_setopt($ch, CURLOPT_PROXYPORT, "1080");
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$content = curl_exec($ch); //执行并存储结果
$error = curl_errno($ch); //获取错误
if($error){
echo '错误代码:'.$error;
}
curl_close($ch);
return $content;
}
function post($url, $data = [], $refer = ''){
$ch = curl_init($url);
$cookie_file = tempnam('./temp', 'cookie');
//返回数据,超时
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据不直接输出
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); //允许cURL函数执行的最大秒数
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 60); //尝试连接时等待的秒数。使用0无限期等待。
curl_setopt ($ch, CURLOPT_HEADER, false); //TRUE 在输出中包含标头
//refer
curl_setopt($ch, CURLOPT_REFERER, $refer); //来路模拟, 要在HTTP请求中使用 的“Referer:”标头的内容。
//post
curl_setopt($ch, CURLOPT_POST, 1); //发送POST类型数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //POST数据,$data可以是数组,也可以是拼接
// 需要cookie支持的采集
// curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie_file); //存储提交后得到的cookie数据,登录接口
// curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file); //使用提交后得到的cookie数据做参数
// 压缩网页采集
// curl_setopt($ch, CURLOPT_ENCODING, "gzip"); //指定gzip压缩
// SSL
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 终止从服务端进行验证
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); //自定义证书
// curl_setopt($ch, CURLOPT_SSLCERT, $file_cret); //证书
// curl_setopt($ch, CURLOPT_SSLKEY, $file_key); //证书
//代理 通过代理访问需要额外添加的参数项, 本地ssr代理
// curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
// curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
// curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1");
// curl_setopt($ch, CURLOPT_PROXYPORT, "1080");
// 302跳转(301跳转)
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //跳转会继续跟踪访问,而且cookie在header里面被保留了下来
$content = curl_exec($ch); //执行并存储结果
$error = curl_errno($ch); //获取错误
if($error){
echo '错误代码:'.$error;
}
curl_close($ch);
return $content;
}
// 模拟上传文件
// 对于上传文件,这句话包含两个信息:
// 1. 要上传文件,post的数据参数必须使用数组,使得Content-Type头将会被设置成multipart/form-data。
// 2. 要上传文件,在文件名前面加上@前缀并使用完整路径。
// $file = array('name' => 'Foo', 'file' => '@d:/test.jpg'); 或者array(Foo' => '@d:/test.jpg');
function post_file($url, $file){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $file);
curl_exec($ch);
}
echo get('https://www.youtube.com/');