PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)


Posted in PHP onDecember 14, 2016

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

extension=php_curl.dll

Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“?with-curl” 参数。

1、 一个抓取网页的简单案例:

[php] view plain copy print?
// 创建一个新cURL资源 
$ch = curl_init();  
// 设置URL和相应的选项 
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/"); 
curl_setopt($ch, CURLOPT_HEADER, false);  
// 抓取URL并把它传递给浏览器 
curl_exec($ch); 
//关闭cURL资源,并且释放系统资源 
curl_close($ch);

2、POST数据案例:

[php] view plain copy print?
// 创建一个新cURL资源 
$ch = curl_init(); 
$data = 'phone='. urlencode($phone); 
// 设置URL和相应的选项 
curl_setopt($ch, CURLOPT_URL, "http://www.post.com/"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
// 抓取URL并把它传递给浏览器 
curl_exec($ch); 
//关闭cURL资源,并且释放系统资源 
curl_close($ch);

3、关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。

关于Cookie,你需要了解下面三个参数:

  • CURLOPT_COOKIE,在当面的会话中设置一个cookie
  • CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
  • CURLOPT_COOKIEFILE,Cookie的文件。

PS:新浪微博登陆API部分截取(部分我增加了点注释,全当参数翻译下。哈哈) 有兴趣的自己研究,自己挪为己用。嘿嘿

[php] view plain copy print?
/** 
   * Make an HTTP request 
   * 
   * @return string API results 
   * @ignore 
   */ 
  function http($url, $method, $postfields = NULL, $headers = array()) { 
    $this->http_info = array(); 
    $ci = curl_init(); 
    /* Curl settings */ 
    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//让cURL自己判断使用哪个版本 
    curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);//在HTTP请求中包含一个"User-Agent: "头的字符串。 
    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);//在发起连接前等待的时间,如果设置为0,则无限等待 
    curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);//设置cURL允许执行的最长秒数 
    curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);//返回原生的(Raw)输出 
    curl_setopt($ci, CURLOPT_ENCODING, "");//HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。 
    curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);//禁用后cURL将终止从服务端进行验证 
    curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));//第一个是cURL的资源句柄,第二个是输出的header数据 
    curl_setopt($ci, CURLOPT_HEADER, FALSE);//启用时会将头文件的信息作为数据流输出 
    switch ($method) { 
      case 'POST': 
        curl_setopt($ci, CURLOPT_POST, TRUE); 
        if (!empty($postfields)) { 
          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); 
          $this->postdata = $postfields; 
        } 
        break; 
      case 'DELETE': 
        curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); 
        if (!empty($postfields)) { 
          $url = "{$url}?{$postfields}"; 
        } 
    } 
    if ( isset($this->access_token) && $this->access_token ) 
      $headers[] = "Authorization: OAuth2 ".$this->access_token; 
    $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR']; 
    curl_setopt($ci, CURLOPT_URL, $url ); 
    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers ); 
    curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE ); 
    $response = curl_exec($ci); 
    $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); 
    $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); 
    $this->url = $url; 
    if ($this->debug) { 
      echo "=====post data======\r\n"; 
      var_dump($postfields); 
 
      echo '=====info====='."\r\n"; 
      print_r( curl_getinfo($ci) ); 
 
      echo '=====$response====='."\r\n"; 
      print_r( $response ); 
    } 
    curl_close ($ci); 
    return $response; 
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP 和 XML: 使用expat函数(二)
Oct 09 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
PHP 作用域解析运算符(::)
Jul 27 PHP
解析PHP 5.5 新特性
Jul 02 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
Apr 08 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
PHP编程中的__clone()方法使用详解
Nov 27 PHP
php验证身份证号码正确性的函数
Jul 20 PHP
PHP session会话操作技巧小结
Sep 27 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
Sep 29 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Dec 14 #PHP
Thinkphp 中 distinct 的用法解析
Dec 14 #PHP
PHP 500报错的快速解决方法
Dec 14 #PHP
php json中文编码为null的解决办法
Dec 14 #PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 #PHP
Thinkphp整合微信支付功能
Dec 14 #PHP
php判断是否连接上网络的方法实例详解
Dec 14 #PHP
You might like
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
深入PHP异步执行的详解
2013/06/03 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
java必学必会之static关键字
2015/12/03 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
Python 创建子进程模块subprocess详解
2015/04/08 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
解决Python2.7中IDLE启动没有反应的问题
2018/11/30 Python
简单了解python的一些位运算技巧
2019/07/13 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
跟单文员岗位职责
2014/01/03 职场文书
干部下基层实施方案
2014/03/14 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
社区党务工作总结2015
2015/05/19 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
Apache自带的ab压力测试工具的实现
2022/07/23 Servers
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技