PHP实战之CURL从入门到实战

精选30+云产品,助力企业轻松上云!>>> hot3.png

  • 目录
  • 1.前言
  • 2.使用前准备
  • 3.CURL实战
  • 3.1抓取页面
  • 3.2替换页面信息
  • 3.3调用WebService获取天气
  • 4. 封装CURL的API调用类
  • 4.1 get方法获取接口数据
  • 4.2 post方法获取接口数据
  • 4.3 put方法获取接口数据
  • 4.4 del方法获取接口数据
  • 4.5 patch方法获取接口数据
  • 5.总结

1.前言

curl是利用URL语法在命令行方式下工作的开源文件传输工具,我们能够通过CURL从互联网上获得各种各样的网络资源。下面我们一起学习一下。

2.使用前准备

打开php.ini

查询curl模块有没有打开。

extension=php_curl.dll

3.CURL实战

3.1抓取页面



$ch = curl_init(); //初始化,创建一个新cURL资源
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");//设置URL和相应的选项
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); //关闭cURL资源,并且释放系统资源

?>

3.2替换页面信息



$curlobj = curl_init();// 初始化    
curl_setopt($curlobj, CURLOPT_URL, "http://www.baidu.com"); // 设置访问网页的URL
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, true); // 将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
$output=curl_exec($curlobj);   
curl_close($curlobj);       
echo str_replace("百度","php",$output);

?>

3.3调用WebService获取天气



header("Content-Type:text/html; charset=utf-8");
$data = 'theCityName=东莞';
$url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName';
$headerArray = array("application/x-www-form-urlencoded;charset=utf-8", "Content-length: ".strlen($data));
$userAgent = "user-agent:Mozilla/5.0 (Windows NT 5.1; rv:24.0) Gecko/20100101 Firefox/24.0";
$curlobj = curl_init();
curl_setopt($curlobj,CURLOPT_URL, $url);
curl_setopt($curlobj, CURLOPT_USERAGENT, $userAgent);//伪造浏览器信息
curl_setopt($curlobj, CURLOPT_HEADER, 0);//启用时会将头文件的信息作为数据流输出。这里不启用
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);//如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($curlobj, CURLOPT_POST, 1);//如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
curl_setopt($curlobj, CURLOPT_POSTFIELDS, $data);//需要POST的数据
curl_setopt($curlobj,CURLOPT_HTTPHEADER, $headerArray);
$rtn = curl_exec($curlobj);
if(!curl_errno($curlobj)){
    $info = curl_getinfo($curlobj);
    print_r($info);
} else {
    echo 'Curl error: ' . curl_error($curlobj);
}
curl_close($curlobj);

?>

其中curl_getinfo()函数获取CURL请求输出的相关信息,返回的是一个关联数组,包含以下数据:

  • url:网络地址。
  • content_type:内容编码。
  • http_code:HTTP状态码。
  • header_size:header的大小。
  • request_size:请求的大小。
  • filetime:文件创建的时间。
  • ssl_verify_result:SSL验证结果。
  • redirect_count:跳转计数。
  • total_time:总耗时。
  • namelookup_time:DNS查询耗时。
  • connect_time:等待连接耗时。
  • pretransfer_time:传输前准备耗时。
  • size_uplpad:上传数据的大小。
  • size_download:下载数据的大小。
  • speed_download:下载速度。
  • speed_upload:上传速度。
  • download_content_length:下载内容的长度。
  • upload_content_length:上传内容的长度。
  • starttransfer_time:开始传输的时间表。
  • redirect_time:重定向耗时。

4.封装CURL的API调用类

4.1get方法获取接口数据

/**
 * 通过get方法获取接口数据
 * @param $url
 * @return mixed
 */
public function getUrl($url)
{
    $headerArray = array("Content-type:application/json;", "Accept:application/json");
    $ch = curl_init();//   初始化一个cURL会话。
    curl_setopt($ch, CURLOPT_URL, $url);//需要获取的URL地址,也可以在curl_init()函数中设置。
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//禁用cURL后从服务端进行验证。
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//禁止检查服务器SSL证书
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);//设置HTTP头字段的数组
    $output = curl_exec($ch);//    执行一个cURL会话
    curl_close($ch);
    $output = json_decode($output, true);
    return $output;
}

4.2 post方法获取接口数据

/**
 * 通过post方法获取接口数据
 * @param $url
 * @param $data
 * @return mixed
 */
public function postUrl($url, $data)
{
    $data = json_encode($data);
    $headerArray = array("Content-type:application/json;charset='utf-8'", "Accept:application/json");
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);// 启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//全部数据使用HTTP协议中的"POST"操作来发送。
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray);
    $output = curl_exec($curl);
    curl_close($curl);
    return json_decode($output, true);
}

4.3 put方法获取接口数据

/**
 * 通过put方法获取接口数据
 * @param $url
 * @param $data
 * @return mixed
 */
public function putUrl($url, $data)
{
    $data = json_encode($data);
    $headerArray = array('Content-type:application/json');
    $ch = curl_init(); //初始化CURL句柄
    curl_setopt($ch, CURLOPT_URL, $url); //设置请求的URL
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //设为TRUE把curl_exec()结果转化为字串,而不是直接输出
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT"); //设置请求方式
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置提交的字符串
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);
}

4.4 del方法获取接口数据

/**
 * 通过del方法获取接口数据
 * @param $url
 * @param $data
 * @return mixed
 */
public function delUrl($url, $data)
{
    $data = json_encode($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output, true);
}

4.5 patch方法获取接口数据

/**
 * 通过patch方法获取接口数据
 * @param $url
 * @param $data
 * @return mixed
 */
public function patchUrl($url, $data)
{
    $data = json_encode($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type:application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $output = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($output);
    return $output;
}

5.总结

通过上述学习回顾,我们对CURL有了基本的认识和掌握,能够使用CURL抓取页面、替换页面信息、调用WebService获取天气以及封装了CURL获取API接口的调用类,其中包含get、post、put、del、patch等基本API方法,希望通过本次学习,加强对CURL的理解和以后的实践应用。

你可能感兴趣的:(PHP实战之CURL从入门到实战)