转自: http://www.jb100.net/html/content-22-821-1.html

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%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. php curl常用的5个例子

    转载:http://www.jb100.net/html/content-22-821-1.html php curl常用的5个例子   我用php ,curl主要是抓取数据,当然我们可以用其他的方法 ...

  2. Linux Shell 高级编程技巧4----几个常用的shell脚本例子

    4.几个常用的shell脚本例子    4.0.在写脚本(同样适用在编程的时候),最好写好完善的注释    4.1.kill_processes.sh(一个杀死进程的脚本) #!/bin/bash c ...

  3. Linux中Grep常用的15个例子【转】

    转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件 ...

  4. 详细了解下PHP的curl函数及常用之处

    CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.正因为这么强大,当然PHP也支持 CURL 库,前提是你的ph ...

  5. curl的一些常用命令

    在学习nodejs中get到了一项新的技能crul curl 可以给在命令行上面给node服务器发送一些信息,然后得到服务器返回而响应信息,在命令行中打印出来. 下面是我整理的一些常用的命令:

  6. PHP数据采集curl常用的5个例子

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

  7. curl常用的5个例子(转)

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

  8. curl模拟请求常用参数

    封装一个curl模拟浏览器请求的函数,如下: /** * curl模拟浏览器请求 * @param unknown $url 请求的地址 * @param array $params 请求地址所需要的 ...

  9. 最经典的常用拍照姿势大全,顶级POSE

    伸出手遮阳光.   捂住一只眼睛.   手放在最旁.这是一个极具诱惑的姿势 站立,背对镜头,扭过来,仰角拍, 俩手按在头两边,歪头,或者直头,表情一般都困惑,迷茫,咬下嘴唇效果更佳.         ...

随机推荐

  1. js跨越请求的2中实现 JSONP /后端接口设置运行跨越header

    由于浏览器同源策略,a域名的js向b域名ajax请求会被禁止.JS实现跨越访问接口有2中办法. 1.后端接口设置允许跨越的header头. //header('Access-Control-Allow ...

  2. 配置https域名

    https://help.aliyun.com/knowledge_detail/95505.html?spm=5176.11065259.1996646101.searchclickresult.6 ...

  3. Nginx 日志分析命令

    查看日志存放目录 # find / -name access.log /var/log/nginx/access.log cd /var/log/nginx IP相关统计 统计IP访问量(独立ip访问 ...

  4. 【GO基础】main redeclared in this block问题的排查与解决

    之前的GO练习环境放在虚拟机内,方便了不少.不过在liteIDE打开的情况下,我迁移了虚拟机,刚好两台机子的VMware版本还不同,这就导致了无法恢复挂起状态,我放弃了挂起. 重新启动后,为了继续练习 ...

  5. 循序渐进学.Net Core Web Api开发系列【15】:应用安全

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍W ...

  6. 【FFT&NTT 总结】

    $FFT$总结 (因为还不会啊,,都没做过什么题,所以一边学一边打咯.. 1.主要是用来加速卷积形式的求和吧? $F*G(n)=F[i] × G[n-i]$ 平时是$O(n^2)$的,FFT可以$O( ...

  7. Linux与Windows远程互访(使用Rdesktop与SSH)

    工作的时候经常使用Redhat系列系统,而平常娱乐文档都是在windows平台上进行.因此实现linux与windows远程互访也是很有必要的事情. 本文将介绍如何实现Linux与Windows的远程 ...

  8. [转]eclipse转idea, 快捷键设置

    原文地址: eclipse转idea, 快捷键设置   设置快捷键的途径: 打开idea的配置,找到Keymap,设置为eclipse 另外还要手动设置某些快捷键 上下移动 点击类打开 代码提示 查询 ...

  9. BZOJ4175 : 小G的电话本

    用后缀树统计出出现了x次的本质不同的子串的个数,最后再乘以x,得到一个多项式. 这个多项式常数项为0,但是一次项不为0. 于是把整个多项式除以一次项,通过多项式求ln和多项式求exp求出它的幂. 最后 ...

  10. QQ和微信一键加群加好友代码

    QQ和微信一键加群加好友链接代码实现. 1.QQ加群加好友链接(借助腾讯QQ群推广链接和加好友链接实现) (1).加群技术链接: http://qun.qq.com/join.html (2).加好友 ...