(实用篇)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学习第三十五天——点击行为的判断

    在之前的程序中,我们有两个文件,html、php文件,其中的php文件是处理数据的文件。如果用户直接访问这个文件,是需要验证的。   如果用户直接访问文件--à拒绝(跳转回某个页面) 如果用户点击按钮进入文件-...

    2017年10月18日
    0459
  • php基本环境

    运行环境 保证能够运行php: 测试:echo “abc”; 保证时区设置正确: 测试:echo date(“Y-m-d H:i:s”); 保证模块设置正确: 测试:mysql_connect(“localhost”, ‘root’, ‘123’); 语法环境 有多种嵌入到html代码中的...

    2017年10月31日
    0182
  • 分享sem公司对百度联盟广告数量优化实例。

    针对不同的网站类型、网页情况,百度联盟广告数量优化也有所区别,下面针对常见的专门以百度联盟收益为主的网站和电子商务网站为例,杭州小编sem公司分别介绍广告数量优化的基本技巧。专业百度联盟网站广告数量取...

    2023年6月26日
    00
  • 重蔚php学习第二十九天——php文件载入的原理

    我们通常会在a文件中载入b文件,它的原理其实是:是在a文件载入b文件代码处插入b文件的源代码。而不是去b文件执行。 例1: 文件a 文件b 第二个文件有语法错误,属于编译错误,编译错误会影响整个文件的执行,但我...

    2017年10月5日 PHP自学教程
    0278
  • PHP开发的微信现金红包功能示例

    本文实例讲述了PHP开发的微信现金红包功能。分享给大家供大家参考,具体如下: 微信商家后台-现金红包开发 ?php class wxPay { //配置参数信息 const SHANGHUHAO = "1430998xxx";//商户号 const PARTNERKEY = "le...

    2017年12月8日
    0220
  • php+redis实现商城秒杀功能案例(附代码)

    这篇文章主要为大家详细介绍了php+redis实现商城秒杀功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1、安装redis,根据自己的php版本安装对应的redis扩展(此步骤简单的描述一下) 1.1.安装php_igbina...

    2018年2月26日 PHP案例操作
    0315
  • (实用篇)PHP缓存类完整实例

    本文完整描述了一个简洁实用的PHP缓存类,可用来检查缓存文件是否在设置更新时间之内、清除缓存文件、根据当前动态文件生成缓存文件名、连续创建目录、缓存文件输出静态等功能。对于采用PHP开发CMS系统来说,离不...

    2016年10月22日
    0250
  • (基础篇一)PHP概述,大概了解一下

    什么是PHP PHP(Hypertext Preprocessor,超文本预处理器),是一种服务器端、跨平台、HTML嵌入式的脚本语言,其独特的语法混合了C语言、Java语言和Perl语言的特点,是一种被广泛应用的开源式的多用途脚本语言,...

    2016年10月21日
    0303

联系我们

QQ:951076433

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