(实用篇)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自学教程
    0190
  • php基本环境

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

    2017年10月31日
    0183
  • php实现下载远程图片保存到本地(附代码)

    代码如下:声明一下:贴出来的代码大家可以借鉴,要是能看懂思路就很不错了,还有就是在试验中遇到错误,那就更好了,值得大家去研究! <?php /* *功能:php完美实现下载远程图片保存到本地 *参数:文件url,保存…

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

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

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

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

    2017年10月31日 PHP自学教程
    0234
  • PHP分割指令—分号

    说明:在PHP语言中语句分为两大类,一种是控制型语句,这种语句只是定义当前代码是如何运行的方式,如:流程控制语句、定义函数、定义类等,所以这种控制语句是不写分号结束的;另一种就是功能语句,如:变量声明、…

    2017年11月19日 PHP自学教程
    0398
  • 重蔚php学习第三十五天——点击行为的判断

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

    2017年10月18日
    0461
  • (实用篇)PHPExcel读取Excel文件的实现代码

    用PHPExcel读取Excel 2007 或者Excel2003文件,需要的朋友,可以参考下。 涉及知识点: php对excel文件进行循环读取 php对字符进行ascii编码转化,将字符转为十进制数 php对excel日期格式读取,并进行显示转化 php…

    2016年10月21日
    0275

联系我们

QQ:951076433

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