php curl的使用

时间:2023-03-09 03:39:10
php curl的使用

我们来采集一个页面,通常情况下,我们会使用file_get_contents()函数来获取:

 <?php

 $str = file_get_contents('http://www.baidu.com');

 //或者是:

 $str = file("http://www.baidu.com");

 //或者是:

 readfile("http://www.baidu.com");

 ?>

这样我们会发现,我们没有办法有效地进行错误处理,更重要的是我们没有办法完成一些高难度的任务:
如:处理cookies,验证,表单提交,文件上传等等。这时候我们需要学习一下curl,来帮助自己实现这些复杂的功能。

通过curl_setopt()函数可以方便快捷的抓取网页,curl_setopt 是php的一个扩展库。使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)

//取消下面的注释

extension=php_curl.dll

GET数据案例:

//1.初始化,创建一个新cURL资源
$ch = curl_init(); //2.设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com"); //需要获取的URL地址
//curl_setopt($ch, CURLOPT_HEADER, 1); //启用时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
curl_setopt($ch, CURLOPT_TIMEOUT, 500);
//3.抓取URL并把它传递给浏览器
$data =curl_exec($ch); //4.关闭cURL资源,并且释放系统资源
curl_close($ch);
var_dump($data);

POST数据案例:

   $url = "http://localhost/demo.php";
  $post_data = array ("username" => "bob","key" => "12345");
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  // post数据
  curl_setopt($ch, CURLOPT_POST, 1);
  // post的变量
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  $data = curl_exec($ch);
  curl_close($ch);
  //打印获得的数据
  print_r($data);

获取access_token:

1、新建一个access_token.json文件,要不然第一次运行会报错,

2、新建一个demo.php,写自己APPID、SECRET

<?php
function getJsApiTicket(){
$data = json_decode(file_get_contents("access_token.json"));
if (@$data->expire_time < time()) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";
$res = json_decode(httpGet($url));
if (isset($res->access_token)) {
$access_token = $res->access_token;
} else {
$access_token = false;
}
if ($access_token) {
$datas=(object)[];
$datas->expire_time = time() + 60;
$datas->access_token = $access_token; $fp = fopen("access_token.json", "w+");
fwrite($fp, json_encode($datas));
fclose($fp);
}
} else {
$access_token = $data->access_token;
} return $access_token;
} function httpGet($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl);
curl_close($curl); return $res;
} echo getJsApiTicket();
?>

总体来说,file_get_contents()用来处理本地文件的数据合适,curl用来获取远程的数据比较合适。。。。