(实用篇)PHP curl常用的5个例子

用php 的curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等。但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者是登录以后的页面就比较困难了。

 

1,抓取无访问控制文件

<?php  
     $ch = curl_init();  
     curl_setopt($ch, CURLOPT_URL, "http://localhost/mytest/phpinfo.php");  
     curl_setopt($ch, CURLOPT_HEADER, false);  
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出  
     $result=curl_exec($ch);  
     curl_close($ch);  
?>

2,使用代理进行抓取

为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。google对你的ip地址做限制这个时候,你可以换代理重新抓。

<?php  
     $ch = curl_init();  
     curl_setopt($ch, CURLOPT_URL, "http://blog.51yip.com");  
     curl_setopt($ch, CURLOPT_HEADER, false);  
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
     curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);  
     curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);  
     //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个  
     $result=curl_exec($ch);  
     curl_close($ch);  
 ?>

3,post数据后,抓取数据

单独说一下数据提交数据,因为用 curl的时候,很多时候会有数据交互的,所以比较重要的。

<?php  
     $ch = curl_init();  
     /*在这里需要注意的是,要提交的数据不能是二维数组或者更高 
     *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010') 
     *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/ 
     $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010');  
     curl_setopt($ch, CURLOPT_URL, 'http://localhost/mytest/curl/upload.php');  
     curl_setopt($ch, CURLOPT_POST, 1);  
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
     curl_exec($ch);  
?>

在 upload.php文件中,print_r($_POST);利用curl就能抓取出upload.php输出的内容Array ( [name] => test [sex] => 1 [birth] => 20101010 )

4,抓取一些有页面访问控制的页面

以前写过一篇,页面访问控制的3种方法有兴趣的可以看一下。

如果用上面提到的方法抓的话,会报以下错误

You are not authorized to view this page
You do not have permission to view this directory or page using the credentials 
that you supplied because your Web browser is sending a WWW-Authenticate header 
field that the Web server is not configured to accept.

这个时候,我们就要用CURLOPT_USERPWD来进行验证了

<?php  
     $ch = curl_init();  
     curl_setopt($ch, CURLOPT_URL, "http://club-china");  
     /*CURLOPT_USERPWD主要用来破解页面访问控制的 
     *例如平时我们所以htpasswd产生页面控制等。*/ 
     //curl_setopt($ch, CURLOPT_USERPWD, '231144:2091XTAjmd=');  
     curl_setopt($ch, CURLOPT_HTTPGET, 1);  
     curl_setopt($ch, CURLOPT_REFERER, "http://club-china");  
     curl_setopt($ch, CURLOPT_HEADER, 0);  
     $result=curl_exec($ch);  
     curl_close($ch);  
?>

5,模拟登录到sina

我们要抓取数据,可能是登录以后的内容,这个时候我们就要用到curl的模拟登录功能了。

<?php     
    function checklogin( $user, $password )  
     {  
     if ( emptyempty( $user ) || emptyempty( $password ) )  
     {  
     return 0;  
     }  
     $ch = curl_init( );  
     curl_setopt( $ch, CURLOPT_REFERER, "http://mail.sina.com.cn/index.html" );  
     curl_setopt( $ch, CURLOPT_HEADER, true );  
     curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );  
     curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );  
     curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );  
     curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );  
     curl_setopt( $ch, CURLOPT_URL, "http://mail.sina.com.cn/cgi-bin/login.cgi" );  
     curl_setopt( $ch, CURLOPT_POST, true );  
     curl_setopt( $ch, CURLOPT_POSTFIELDS, "&logintype=uid&u=".urlencode( $user )."&psw=".$password );  
     $contents = curl_exec( $ch );  
     curl_close( $ch );  
     if ( !preg_match( "/Location: (.*)\\/cgi\\/index\\.php\\?check_time=(.*)\n/", $contents, $matches ) )  
     {  
     return 0;  
     }else{  
     return 1;  
     }  
     }   
       
     define( "USERAGENT", $_SERVER['HTTP_USER_AGENT'] );  
     define( "COOKIEJAR", tempnam( "/tmp", "cookie" ) );  
     define( "TIMEOUT", 500 );   
       
     echo checklogin("zhangying215","xtaj227");  
?>

打开/tmp下面的cookie文件看一下

# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
 
mail.sina.com.cn    FALSE    /    FALSE    0    SINAMAIL-WEBFACE-SESSID    
65223c4bd8900284ed463d2a3e1ac182
#HttpOnly_.sina.com.cn    TRUE    /    FALSE    0    SUE    
es%3D8d96db0820c6c79922ad57d422f575e8%26ev%3Dv0%26es2%3Dcddfb8400dc5ca95902367ddcd7f57dd
.sina.com.cn    TRUE    /    FALSE    0    SUP    
cv%3D1%26bt%3D1286900433%26et%3D1286986833%26lt%3D1%26uid%3D1445632344%26user%3D%2
5E5%25BC%25A0%25E6%2598%25A02001%26ag%3D2%26name%3Dzhangying20015%2540sina.com%26nic
k%3D%25E5%25BC%25A0%25E6%2598%25A02001%26sex%3D1%26ps%3D0%26email%3Dzhangying20015
%2540sina.com%26dob%3D1982-07-18
#HttpOnly_.sina.com.cn    TRUE    /    FALSE    0    SID    BihcallomxMx-QZxzGrOlc
SQx%2F0B%2F0cmr.NyQ%2F0B%2FcmGGalmarlmcHrcGlSmrmxmfxal_CBZ%2F_afugCmmGirBYHm0Bc%40fr5ciZiGG5i
#HttpOnly_.sina.com.cn    TRUE    /    FALSE    0    SPRIAL    bfb4102951fd5892a3fd5b42d442cd26
#HttpOnly_.sina.com.cn    TRUE    /    FALSE    0    SINA_USER    %D5%C5%D2001

 

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/1408.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2016年10月20日 12:08
下一篇 2016年10月21日 09:43

相关推荐

  • PHP常量基础

    含义:用于存储一个不会变化也不希望变化的数据的标示符。 常量命名规则,同变量,但习惯说,常常将常量的名称使用“全大写”形式。 定义形式 使用define()函数定义 使用形式:define(“常量名”, 常量值); 推荐常用…

    2017年11月11日 PHP自学教程
    0193
  • 我的php学习第二十天之MySQL基础篇

    昨日回顾 登录MySQL客户端:mysql  -hlocalhost  -uroot  -proot 显示数据库:show databases; 创建数据库:create database if not exists db_name  charset  utf8;  //默认的字符集是latin1 上图表示:创建数据库…

    2016年5月13日
    0448
  • 使用PHP导入和导出CSV文件(附代码)

    项目开发中,很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件,那么具体该如何实现呢?本文将使用PHP并结合mysql,实现了CSV格式数据的导入和导出功能。 我们先准备mysql数据表,假设项目中有一张记…

    2018年2月28日
    0396
  • 重蔚php学习第三十五天——php表单传值复选框案例

    关于爱好信息的保存与显示 例1:爱好信息入库 html代码: php代码: 例2:爱好信息显示 查找个人信息,得到个人爱好的字符串 将个人爱好字符串分割成一个数组 定义所有爱好的数组 循环遍历所有爱好数组 如果当前爱…

    2017年10月18日 PHP自学教程
    0298
  • 环境变量有什么用?为什么需要设置php.ini的位置?

    环境变量有什么用? 就是为了一个方便:让我们使用某个“命令”的时候,可以直接使用,而无需再去找到该命令所在的位置。 为什么需要设置php.ini的位置? php默认情况下是可以使用,但又很多功能不能用——需要去php.in…

    2017年10月31日 PHP自学教程
    0236
  • (理论篇)温故而知新_PHP入门基础教程

    简单的回顾一下基础知识 1、嵌入方法: 类似ASP的<%,PHP可以是<?php或者是<?,结束符号是?>,当然您也可以自己指定。 2、引用文件: 引用文件的方法有两种:require 及 include。 require 的使用方法…

    2016年10月25日
    0689
  • 我的php学习第二十一天之php基础篇

    昨日回顾 PHP变量 1)不需要提前定义,使用时直接赋一个值即可。 2)PHP的变量的命名规则,跟JS一样,允许的字符有:大小写英文字母、0-9、_ 3)PHP的变量必须以美元符号$开头;例如:$name=“周更生”; 4)PHP的变量…

    2015年12月1日
    0431
  • PHP中的新手入门指南。

    PHP是一门热门的前端编程语言,它功能强大、易学易用,被广泛用于网站的开发和维护中。对于初学者来说,PHP入门需要一定的学习和掌握,下面就为大家提供一些PHP中的新手入门指南。一、学习基本概念在学习PHP之前,…

    2023年5月28日
    08

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息