我们来采集一个页面,通常情况下,我们会使用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用来获取远程的数据比较合适。。。。

php curl的使用的更多相关文章

  1. 在PowerShell中使用curl(Invoke-WebRequest)

    前言 习惯了windows的界面模式就很难转去命令行,甚至以命令行发家的git也涌现出各种界面tool.然而命令行真的会比界面快的多,如果你是一个码农. situation:接到需求分析bug,需要访 ...

  2. php中实现的一个curl批处理的实例

    curl是利用URL语法在命令行方式下工作的开源文件传输工具 本文在php中实现了的一个curl批处理的实例. 代码如下: header("Content-Type:text/html;ch ...

  3. PHP curl 函数

    转载http://sunking.sinaapp.com/archives/111 最近使用curl的时候,发现了一个比较好用的函数,当然是初级者适用的一个函数,就是curl_getinfo(), 在 ...

  4. curl -w,–write-out参数详解

    顾名思义,write-out的作用就是输出点什么.curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出. 输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{varia ...

  5. CURL HELP

    CURL下载 在windows的系统环境变量中,将CURL的路径(curl.exe存放的路径)复制到"Path"变量的结尾 Usage: curl [options...] < ...

  6. curl的登录总结

    demo1 <?php $curl=curl_init('http://www.baidu.com'); curl_exec($curl); curl_close($curl); ?> c ...

  7. php curl获取的数据不直接输出

    curl获取页面内容,不直接输出到页面 必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true curl_setopt($ch, CURLOPT_RETURNTRANSFER ...

  8. PHP的CURL

    使用CURL完成一个请求: 初始化连接句柄 设置CURL选项 执行并获取结果 释放CURL连接句柄 发送GET请求 function doGetRequest($url,$data,$timeout ...

  9. PHP curl报错“Problem (2) in the Chunked-Encoded data”解决方案

    $s = curl_init(); curl_setopt($s, CURLOPT_POST, true); curl_setopt($s, CURLOPT_POSTFIELDS, $queryStr ...

  10. php获得远程信息到本地使用的3个函数:file_get_contents和curl函数和stream_get_contents

    1:file_get_contents echo file_get_contents("http://www.php.com/index.php");   2:curl funct ...

随机推荐

  1. IO流,File类的测试........课堂加总结

    package liu0926; import java.io.File; import java.io.IOException; public class Text01 { public stati ...

  2. Odoo Many2many 指定默认分组过滤

    在odoo里如果想单击某个菜单打开的页面是自带过滤的,可以在打开菜单的动作中添加默认过滤来实现,今天有同学在群里问,如何在Many2many的添加更多的弹出窗口中添加类似的过滤,其实是非常非常简单的, ...

  3. vbox下Oracle Enterprise liunx5.4虚拟机安装10G RAC实验(一)

    1.配置第一个虚拟机 1.1 安装后的登录界面 1.2 第1台机器(单数据配置方面) 1.2.1 验证安装包 1.2.2 修改内核参数 1.2.3添加安全限制 1.2.4关闭防火墙 1.2.5添加用户 ...

  4. php extension memcache and memcached module on centos6

    环境 centos6 php5.6 nginx 1.8 防火墙均关闭 我在这里简单描述一下过程 #install nginxyum -y install pcre pcre-devel openssl ...

  5. C# Math

    Math.Ceiling 向上进位取整.例如:Math.Ceiling(32.6)=33; Math.Ceiling(32.0)=32; Math.Floor 向下舍位取整.例如:Math.Floor ...

  6. Transform a BST to greater sum tree

    Given a BST, transform it into greater sum tree where each node contains sum of all nodes greater th ...

  7. js树形控件

    js树形控件 ztree http://www.treejs.cn/

  8. NEC学习 ---- 模块 - 带点文字链接列表

    带点文字链接列表, 实现的效果是, 调整字体大小, 点的位置不会跟着变动. HTML如下: <div class="container"> <div class= ...

  9. ADB工具和手机抓包方法介绍

    Android抓包方法 工具包内容如下:(下载地址:http://download.csdn.net/download/yezhaohui2011/8368061) adb ——谷歌提供的安卓远程调试 ...

  10. vsftpd增加ssl安全验证

    查看vsftpd是否支持ssl ldd `which vsftpd`|grep ssl 输出 libssl.so.6 => /lib64/libssl.so.6 (0x00002ba684304 ...