文档章节

php curl常用的5个例子

h
 hanbingtel
发布于 2015/06/12 19:16
字数 861
阅读 8
收藏 0
我用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 ( empty( $user ) || empty( $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%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


本文转载自:

共有 人打赏支持
h
粉丝 0
博文 11
码字总数 1992
作品 0
济南
私信 提问
PHP的curl常用的5个例子

PHP的curl常用的5个例子 1,抓取无访问控制文件 <?php 2,使用代理进行抓取 为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。...

Yomut
2016/07/28
11
0
请教如何用PHP的cURL库登录oschina?

第一次用PHP的cURL库,看了手册一头雾水,照着网上的程序片段还是无法登录。 其实项目是要登录淘宝后台,但是淘宝比较复杂,就先用oschina来做个例子。没想到也不成功,这说明我的方法有问题...

Jacky.Wang
2011/04/29
588
1
PHP的curl常用的5个例子

1,抓取无访问控制文件 <?php $ch= curl_init(); curlsetopt($ch, CURLOPTURL,"http://localhost/mytest/phpinfo.php"); curlsetopt($ch, CURLOPTHEADER, false); curlsetopt($ch, CURLOPTR......

梦梦阁
2015/11/24
42
0
Hbase 学习(二)各种filter

各种filter 今天的主题是Filter,hbase客户端查询的时候,自定义查询filter。 直接上例子吧,不多说别的了,第一个例子是RowFilter的。 Scan scan = new Scan();scan.addColumn(Bytes.toByte...

2k10
2015/05/11
0
0
php-fpm的pool、网站慢执行日志、定义open_basedir、设置php日志、进程管理

php-fpm的pool 编辑php-fpm的配置文件 增加 删除 创建目录 创建pool文件 增加 vim shu32.conf 增加 在web虚拟文件设置sock test.com中设置默认sock 检测与生效 php-fpm与nginx都要检测生效 ...

若白衣
03/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ElasticSearch实战:Linux日志对接Kibana

本文由云+社区发表 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTFul web接口。ElasticSearch是用Java开发的,并作为Apache许可条款下...

腾讯云加社区
7分钟前
0
0
FeignClient超时配置

1前沿 使用Feign调用接口分两层,ribbon的调用和hystrix的调用,所以ribbon的超时时间和Hystrix的超时时间的结合就是Feign的超时时间 1.1ribbon配置 ribbon: OkToRetryOnAllOperations: f...

lovelan1314
10分钟前
0
0
分布式ID

grace_233
13分钟前
0
0
spring boot集成socketIO

spring boot集成netty-socketio java用socket给用户分组,然后给分组发送消息,或者给单个人发送消息 第一步:加载netty-socketio包 <dependency><groupId>com.corundumstudio.socketio<......

小马_wolf
15分钟前
0
0
Linux无法写入权限问题 & 解决Wordpress不能自动安装主题、插件

正 文: 当你的wordpress遇到以下问题时: 1、不能上传图片 2、不能自动安装主题、插件(需要FTP账户) 3、不能自动更新 4、其它任何需要wordpress写文件的问题 这些问题基本都是一个原因,你...

Yao--靠自己
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部