文档章节

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
468
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

没有更多内容

加载失败,请刷新页面

加载更多

分布式缓存架构设计

零、 题记 在高并发场景下,需要通过缓存来减少数据库的压力,使得大量的访问进来能够命中缓存,只有少量的需要到数据库层。由于缓存基于内存,可支持的并发量远远大于基于硬盘的数据库。所以...

Ala6
17分钟前
1
0
简单工厂模式

public abstract class Operation { private double numberA = 0; private double numberB = 0; public double getNumberA() { return numberA; } ......

NinjaFrog
20分钟前
0
0
git(一) 基本操作(branch、tag、冲突)

撤销操作 修改最后一次提交 解释:修改上次提交。可以修改内容和提交信息 适用场景: 1) 提交信息写错了; 2) 提交多加了配置文件; 3)提交少加了文件 示例操作: $ git commit -m '提交1'...

开心的哈士奇
22分钟前
0
0
Vue中路由管理器Vue Router使用方式(二)-推荐

一、Vue中使用Vue Router简单方式使用 vue add xxx命令添加插件 使用步骤,本人假设已经安装好了Vue CLI工具,了解更多参考:VSCode 搭建Vue开发环境之Vue CLI 1.创建项目 vue create hello...

tianma3798
35分钟前
0
0
设计模式(十六)[结构模式] 装饰模式(Decorator)

1.什么是装饰模式? 装饰模式又名包装模式。装饰模式以对客户端透明的方式扩展对象功能,是继承关系的一个替代方案。 2.模式的类图 抽象构件(Component)角色:给出一个抽象接口,以规范准备接收...

1527
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部