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 缓冲的免费实现方法
Oct 09 PHP
15种PHP Encoder的比较
Apr 17 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
PHP的基本常识小结
Jul 05 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
php关联数组快速排序的方法
Apr 17 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
PHP下载文件的函数实例代码
May 18 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 PHP
thinkphp框架类库扩展操作示例
Nov 26 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实现图片转换成ASCII码的方法
2015/04/03 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
浅谈python日志的配置文件路径问题
2018/04/28 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python3转换code128条形码的方法
2019/04/17 Python
Django之路由层的实现
2019/09/09 Python
python regex库实例用法总结
2021/01/03 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
优秀毕业生自我鉴定
2014/01/19 职场文书
气象学专业个人求职信
2014/03/15 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
小学校长个人总结
2015/03/03 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
JS中如何优雅的使用async await详解
2021/10/05 Javascript