cURL扩展的使用
cURL介绍
cURL使用场景
爬取网页数据和资源
请求接口数据
下载ftp服务器资源
其他所有网络上的资源
开启扩展
windows下通过修改
php.ini
文件开启检验是否开启cURL扩展的方法
1. 命令行输入:
php -i
列出所有的php信息,然后ctrl+F
搜索curl
关键字,如果为enable
则为开启,还可以查看curl的版本等信息。2. 编写一个php文件,里面输入
phpinfo()
,也可以打印出php信息
PHP中使用cURL
使用示例
爬取一个网页的内容并对其进行替换
<?php $ch = curl_init(); // 初始化curl句柄 curl_setopt($ch, CURLOPT_URL, "http://news.ifeng.com/"); // 设置URL地址 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行之后不直接打印出来内容 $res = curl_exec($ch); // 执行 curl_close($ch); // 关闭curl句柄 echo str_replace("台湾", "中国台湾省", $res); // 替换指定内容后输出
获取XML数据并解析为数组
<?php // libxml_disable_entity_loader(false); $data = "theCityName=杭州"; // 传递的参数数据 $ch = curl_init(); // 初始化curl句柄 curl_setopt($ch, CURLOPT_URL, "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName"); // 设置URL地址 curl_setopt($ch, CURLOPT_HEADER, 0); // 不显示header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行之后不直接打印出来内容 curl_setopt($ch, CURLOPT_POST, 1); // 采用post方式请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 将要post的数据传递过去 curl_setopt($ch, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8", "Content-length:".strlen($data), "X-FORWARDED-FOR:111.222.333.4", "CLIENT-IP:111.222.333.4")); // 设置http头部信息,并构造了一个虚拟ip,防止ip封杀 // curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 带上user_agent,否则可能会被查出来是爬虫,加上可能他就认为是浏览器 $res = curl_exec($ch); // 执行 // 执行成功返回信息,执行失败显示错误 if (!curl_errno($ch)) { // 如果是加载一个xml文件,用simplexml_load_file $xmlObj = simplexml_load_string($res); $jsonData = json_encode($xmlObj); $arr = json_decode($jsonData,true); foreach($arr as $val) { foreach($val as $k => $v) { echo "{$k} => {$v}<br>"; } } } else { echo "cURL error: " . curl_error($ch); } curl_close($ch); // 关闭curl句柄
模拟登陆获取用户中心数据
<?php $data = '[email protected]&password=xxxxxx&remember=1'; $ch = curl_init(); // 初始化 curl_setopt($ch, CURLOPT_URL, "http://www.imooc.com/user/login"); // 设置访问网页的URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行之后不直接打印出来 // cookie相关设置,这部分设置需要在所有会话开始之前设置 date_default_timezone_set('PRC'); // 使用cookie必须先设置时区 curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); curl_setopt($ch, CURLOPT_COOKIEFILE, "cookiefile"); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookiefile"); curl_setopt($ch, CURLOPT_COOKIE, session_name() . '=' . session_id()); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 这样能让curl跟踪页面跳转 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_HTTPHEADER, array("application/x-www-form-urlencoded;charset=utf-8", "Content-length: ".strlen($data) )); curl_exec($ch); // 执行 curl_setopt($ch, CURLOPT_URL, "http://www.imooc.com/space/index"); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type:text/xml")); $output = curl_exec($ch); curl_close($ch); echo $output; ?>
下载ftp服务器上面的资源
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "ftp://192.168.1.100/downloaddemo.txt"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 超时自动结束 curl_setopt($ch, CURLOPT_USERPWD, "peter.zhou:123456"); // ftp的用户名和密码,冒号分割 $outfile = fopen('dest.txt', 'wb'); // 保存到本地的文件名 $rtn = curl_exec($ch); fclose($outfile); if(!curl_errno($ch)) { // $info = curl_getinfo($ch); // print_r($info); echo "RETURN: " . $rtn; } else { echo 'Curl error: ' . curl_error($ch); }
上传资源到ftp服务器
<?php $ch = curl_init(); $localfile = 'ftp01.php'; $fp = fopen($localfile, 'r'); curl_setopt($ch, CURLOPT_URL, "ftp://192.168.1.100/ftp01_uploaded.php"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 300); curl_setopt($ch, CURLOPT_USERPWD, "peter.zhou:123456"); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile)); $rtn = curl_exec($ch); fclose($fp); if (!curl_errno($ch)) { echo "Uploaded successfully."; } else { echo "Curl error: " .curl_error($ch); }
访问https资源
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://cdn.bootcss.com/jquery/3.3.1/jquery.js"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 执行之后不直接打印出来 // 设置https支持 date_default_timezone_set('PRC'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 终止从服务器进行验证 $output = curl_exec($ch); curl_close($ch); echo $output;
cURL常用函数
curl_init();
// 初始化cURL会话,可以传入url,也可以不传入,返回cURL会话句柄curl_setport($ch, $option, $value);
// 为cURL设置一个选项curl_setport_array($ch, $optionArray);
// 为cURL批量设置选项curl_exec($ch);
// 执行cURL会话,返回执行结果curl_errno($ch);
// 返回最后一次的错误代码,没有错误返回0curl_error($ch);
// 返回当前回话最后一次错误的字符串curl_close($ch);
// 关闭cURL会话curl_escape($ch,$str);
// 使用URL编码当前的字符串curl_unescape($ch,$str);
// 解码给定的URL字符串curl_getinfo($ch);
// 获取一个cURL连接资源句柄信息,如果第二个参数传入了具体的参数,那么会只返回这一个参数的值curl_version();
// 获取cURL版本信息,参数一般情况下不需要
相关推荐
83911535 2020-11-13
曾是土木人 2020-10-31
yegen00 2020-10-21
soralaro 2020-10-11
katanaFlower 2020-09-18
wytzsjzly 2020-08-17
88407710 2020-08-17
ChinaJoeEE 2020-08-16
CyborgLin 2020-08-15
Blueberry 2020-08-15
PinkBean 2020-08-11
katanaFlower 2020-08-03
hunningtu 2020-07-30
阿债的方寸天地 2020-06-28
pingyan 2020-06-25
wytzsjzly 2020-06-25
阳光岛主 2020-06-25
阿债的方寸天地 2020-06-16