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

1,抓取无访问控制文件

查看复制打印?
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://localhost/aerchi/phpinfo.php");
  4. curl_setopt($ch, CURLOPT_HEADER, false);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
  6. $result=curl_exec($ch);
  7. curl_close($ch);
  8. ?>

2,使用代理进行抓取

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

查看复制打印?
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://www.aerchi.com");
  4. curl_setopt($ch, CURLOPT_HEADER, false);
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
  7. curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080);
  8. //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个
  9. $result=curl_exec($ch);
  10. curl_close($ch);
  11. ?>

3,post数据后,抓取数据

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

查看复制打印?
  1. <?php
  2. $ch = curl_init();
  3. /*在这里需要注意的是,要提交的数据不能是二维数组或者更高
  4. *例如array('name'=>serialize(array('tank','zhang')),'sex'=>1,'birth'=>'20101010')
  5. *例如array('name'=>array('tank','zhang'),'sex'=>1,'birth'=>'20101010')这样会报错的*/
  6. $data = array('name' => 'test', 'sex'=>1,'birth'=>'20101010');
  7. curl_setopt($ch, CURLOPT_URL, 'http://localhost/aerchi/curl/upload.php');
  8. curl_setopt($ch, CURLOPT_POST, 1);
  9. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  10. curl_exec($ch);
  11. ?>

在 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来进行验证了

查看复制打印?
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://club-china");
  4. /*CURLOPT_USERPWD主要用来破解页面访问控制的
  5. *例如平时我们所以htpasswd产生页面控制等。*/
  6. //curl_setopt($ch, CURLOPT_USERPWD, '231144:2091XTAjmd=');
  7. curl_setopt($ch, CURLOPT_HTTPGET, 1);
  8. curl_setopt($ch, CURLOPT_REFERER, "http://club-china");
  9. curl_setopt($ch, CURLOPT_HEADER, 0);
  10. $result=curl_exec($ch);
  11. curl_close($ch);
  12. ?>

5,模拟登录到sina

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

查看复制打印?
  1. <?php
  2. function checklogin( $user, $password )
  3. {
  4. if ( emptyempty( $user ) || emptyempty( $password ) )
  5. {
  6. return 0;
  7. }
  8. $ch = curl_init( );
  9. curl_setopt( $ch, CURLOPT_REFERER, "http://mail.sina.com.cn/index.html" );
  10. curl_setopt( $ch, CURLOPT_HEADER, true );
  11. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  12. curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
  13. curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
  14. curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
  15. curl_setopt( $ch, CURLOPT_URL, "http://mail.sina.com.cn/cgi-bin/login.cgi" );
  16. curl_setopt( $ch, CURLOPT_POST, true );
  17. curl_setopt( $ch, CURLOPT_POSTFIELDS, "&logintype=uid&u=".urlencode( $user )."&psw=".$password );
  18. $contents = curl_exec( $ch );
  19. curl_close( $ch );
  20. if ( !preg_match( "/Location: (.*)\\/cgi\\/index\\.php\\?check_time=(.*)\n/", $contents, $matches ) )
  21. {
  22. return 0;
  23. }else{
  24. return 1;
  25. }
  26. }
  27. define( "USERAGENT", $_SERVER['HTTP_USER_AGENT'] );
  28. define( "COOKIEJAR", tempnam( "/tmp", "cookie" ) );
  29. define( "TIMEOUT", 500 );
  30. echo checklogin("zhangying215","xtaj227");
  31. ?>

打开/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%25E5%25BC%25A0%25E6%2598%25A02001%26ag%3D2%26name%3Dzhangying20015%2540sina.com%26nick%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-QZxzGrOlcSQx%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

php curl常用的5个例子相关推荐

  1. linux中Grep常用的15个例子,Linux中Grep惯用的15个例子

    Linux中Grep常用的15个例子 Grep命令主要用于从文件中查找指定的字符串. 首先建一个demo_file: $ cat demo_file THIS LINE IS THE 1ST UPPE ...

  2. Linux curl 常用示例

    本篇文章包含了curl的常用案例使用. 如果想了解curl选项的详细说明,请参考前一篇文章「Linux curl 命令详解」. 常见网页访问示例 基本用法 访问一个网页 curl https://ww ...

  3. curl get请求_Linux curl 常用示例你都 Get 了吗?| CSDN 博文精选

    作者 | LightZhang666责编 | 屠敏出品 | CSDN 博客本篇文章包含了curl的常用案例使用.常见网页访问示例基本用法访问一个网页: curl https://www.baidu.c ...

  4. Linux curl 常用示例你都 Get 了吗?| CSDN 博文精选

    作者 | LightZhang666 责编 | 屠敏 出品 | CSDN 博客 本篇文章包含了curl的常用案例使用. 常见网页访问示例 基本用法 访问一个网页: curl https://www.b ...

  5. curl常用参数详解及示例

    curl简介 curl是一个开源的命令行工具,它基于网络协议,对指定URL进行网络传输,得到数据后不任何具体处理(如:html的渲染等),直接显示在"标准输出"(stdout)上. ...

  6. linux命令——curl常用命令使用方法简单了解

    curl是什么? 全称CommandLine URL 或 CommandLine Uniform Resource Locator,在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输.是 ...

  7. php获取页面输出内容,PHP CURL获取页面内容输出例子

    使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出.这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true. 1.curl ...

  8. curl 常用的命令

    原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/ 下载单个文件,默认将输出打印到标准输出中(STDOUT)中 curl http://w ...

  9. 【Linux常用命令】linux常用命令集合配例子解析说明(持续更新)【Linux基础命令使用及总结】2020-12-21

    Linux基本命令集合(持续更新) 前言 一.pwd命令 二.ls命令 三.cd命令 前言 本文将随着个人头发稀疏程度的时间戳而更新,且这个列举的命令,不管简单复制与否,都会逐一做出举例解释说明,但某 ...

最新文章

  1. Syszuxpin中文输入法移植
  2. 被忽视的ArrayList,你知道多少
  3. 【学习笔记】第三章 python3核心技术与实践--Jupyter Notebook
  4. mybatis-plus 使用乐观锁修改
  5. 用flash做古诗动画_带孩子用两张A4纸做动画(内附资源可下载)
  6. 信息学奥赛一本通 1358:中缀表达式值(expr)
  7. HEVC与VP9编码效率对比
  8. 寻找 时间轴网页设计灵魂
  9. [Vani有约会]雨天的尾巴(树上差分+线段树合并)
  10. NeatUpload的安装使用 文件上传。可传大文件。
  11. java调用高拍仪获取图像_使用Java调用摄像头进行拍照源码
  12. rrpp协议如何修改_华为交换机―RRPP协议
  13. ACE_Message_QueueACE_MT_SYNCH::putq ()使用时需要注意的地方
  14. 词云生成库WordCloud详解(一):概述、ImageColorGenerator类
  15. 信捷PLC以太网通讯数据采集解决方案
  16. 如何看待”咸鱼”一样的活着
  17. 苹果计算机如何出现关机界面,让你的iPhone开关机重启和电脑一样显示进度条
  18. char* 和char[]的区别
  19. 一个完整的php项目示例
  20. 爱了爱了!java是不是比前端难

热门文章

  1. 制片人、出品人、监制、特别出演分别指的是什么?
  2. 美瞳赛道,只做得好看跑不赢
  3. android p三星,索尼XZ3新机采用Android P系统,对标三星note9,网友:外观
  4. Flickr和DasBlog以及地理标记和EXIF等等
  5. python爬虫实战笔记---以轮子哥为起点Scrapy爬取知乎用户信息
  6. python bp神经网络 异或_两层神经网络输出异或
  7. 使用osmconvert转换pbf文件至osm文件
  8. 【笔记软件obsidian】从入门到精通
  9. 俄方产量也将削减恐左右油价未来走势
  10. linux svn 配置文件路径,linux下svn目录访问权限的配置