登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

CURL 自动登录,或者自动提取网页中的内容  

2009-10-21 16:50:58|  分类: PHP开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 CURL 的主要用途就是命令行自动化工具,如模拟一个使用者在浏览器端访问一个网站,自动登录,或者自动提取网页中的内容或二进制文件或数据。

       首先,需要在 php.ini 中打开 php_curl.dll 或 php_curl.so 的扩展:
extension = php_curl.dll
然后重启 apache。

       1.获取远程网页内容

PHP代码
  1. <?php   
  2. //初始化curl   
  3. $ch = curl_init() or die(curl_error());   
  4. //设置url参数   
  5. curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/s?wd=php5");   
  6. //要求curl返回数据   
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
  8. //执行请求   
  9. $result = curl_exec($chor die(curl_error());   
  10. //取得返回结果并显示   
  11. echo $result;   
  12. echo curl_error($ch);   
  13. //关闭curl   
  14. curl_close($ch);   
  15. ?>  

       该例将从百度上搜索结果并抓取过来。

       2.下载远端文件        该脚本的功能是从某个网址下载文件,然后另存到本地某个目录中。可以看到使用 CURL 实现了下载的自动化。

PHP代码
  1. <?php   
  2. function curl_download($remote$local)   
  3. {   
  4.     $cp = curl_init($remote);   
  5.     $fp = fopen($local"w");   
  6.        
  7.     curl_setopt($cp, CURLOPT_FILE, $fp);   
  8.     curl_setopt($cp, CURLOPT_HEADER, 0);   
  9.   
  10.     curl_exec($cp);   
  11.     curl_close($cp);   
  12.     fclose($fp);   
  13. }   
  14. //从远端取得文件,保存在本地硬盘 d:\software 目录下   
  15. curl_down("http://www.skycn.com/downloads/file.zip""d:/software");   
  16. ?>  

       3.使用表单自动登录

       (1)Cookie 用法
在一些登录表,需要发送 Cookie 内容才能实现正确登录,使用 CURL 非常容易实现,请看下列程序:

PHP代码
  1. <?php   
  2. /*  
  3.   这个脚本可以实现:  
  4.   在一个表单实现登录,保存在 session 中,登录后下载一个文件  
  5. */  
  6.   
  7. //初始化curl   
  8. $ch = curl_init();   
  9.   
  10. //设置登录表单的 URL 地址   
  11. curl_setopt($ch, CURLOPT_URL, 'http://mis.example.com/index.php');   
  12.   
  13. //使用 POST 方法   
  14. curl_setope($ch, CURLOPT_POST, 1);   
  15.   
  16. //设置 POST 的参数,表单名称和每个表单字段元素   
  17. curl_setopt($ch, CURLOPT_POSTFIELDS, 'USERNAME=administrator&PADDWORD=sodopass&imageField=&Action=Login');   
  18.   
  19. //模信浏览器的行为,并保存 Cookie 内容   
  20. curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');   
  21.   
  22. //设置 CURLOPT_RETURNTRANSFER 变量的值为1,表示 curl_exec() 方法返回一个字符串返回值   
  23. curl_setopt($ch, CURLOPT_RETURNFRANSFER, 1);   
  24.   
  25. //开始执行请求(表单登录)   
  26. $store = curl_exec($ch);   
  27.   
  28. //调试用对象,可以关闭   
  29. //print_r($store);   
  30.   
  31. //设置文件下载的参数   
  32. //curl_setopt($ch, CURLOPT_URL, 'http://mis.example.com/secret/file.php?file_id=12');   
  33.   
  34. //执行第二次请求(文件下载)   
  35. $content = curl_exec($ch);   
  36. /*  
  37.   $content 表示取得的文件内容,您可以将 $content 变量显示在浏览器,或者直接保存在本地  
  38. */  
  39.   
  40. //关闭 curl 对象   
  41. curl_close($ch);   
  42. ?>  

       (2)POST 用法
特别要注意:POST 的数据要经过 urlencode 编码。

PHP代码
  1. <?php   
  2. //要发送 POST 的字段和值   
  3. $_POST['username'] = '1111';   
  4. $_POST['password'] = '1111';   
  5. $ch = curl_init() or die(curl_error());   
  6. //发送的浏览器信息   
  7. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3');   
  8. $params = "username=$_POST[username]&password=$_POST[password]";   
  9. curl_setopt($ch, CURLOPT_POST, 1);   
  10. curl_setopt($ch, CURLOPT_POSTFIELDS, $params);   
  11. curl_setopt($ch, CURLOPT_URL, "http://www.docan.net/login.php?act=loginok");   
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   
  13. $data1 = curl_exec($chor die(curl_error());   
  14. echo '<font color=black face=verdana size=3>'.$data1.'</font>';   
  15. echo curl_error($ch);   
  16. curl_close($ch);   
  17. ?> 





DE><?php 

set_time_limit
(0); 

@
date_default_timezone_set('Asia/Shanghai'); 

function 
curlrequest($url,$postfield,$proxy=""){ 

$proxy=trim($proxy); 

$user_agent ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"

$ch curl_init();    // 初始化CURL句柄 

if(!empty($proxy)){ 

curl_setopt ($chCURLOPT_PROXY$proxy);//设置代理服务器 



curl_setopt($chCURLOPT_URL$url); //设置请求的URL 

//curl_setopt($ch, CURLOPT_FAILONERROR, 1); // 启用时显示HTTP状态码,默认行为是忽略编号小于等于400的HTTP信息 

//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//启用时会将服务器服务器返回的“Location:”放在header中递归的返回给服务器 

curl_setopt($chCURLOPT_RETURNTRANSFER,1);// 设为TRUE把curl_exec()结果转化为字串,而不是直接输出 

curl_setopt($chCURLOPT_POST1);//启用POST提交 

curl_setopt($chCURLOPT_POSTFIELDS$postfield); //设置POST提交的字符串 

//curl_setopt($ch, CURLOPT_PORT, 80); //设置端口 

curl_setopt($chCURLOPT_TIMEOUT25); // 超时时间 

curl_setopt($chCURLOPT_USERAGENT$user_agent);//HTTP请求User-Agent:头 

//curl_setopt($ch,CURLOPT_HEADER,1);//设为TRUE在输出中包含头信息 

//$fp = fopen("example_homepage.txt", "w");//输出文件 

//curl_setopt($ch, CURLOPT_FILE, $fp);//设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。 

curl_setopt($ch,CURLOPT_HTTPHEADER,array( 

'Accept-Language: zh-cn'

'Connection: Keep-Alive'

'Cache-Control: no-cache' 

));//设置HTTP头信息 

$document curl_exec($ch); //执行预定义的CURL 

$info=curl_getinfo($ch); //得到返回信息的特性 

//print_r($info); 

if($info[http_code]=="405"){ 

echo 
"bad proxy {$proxy}\n";  //代理出错 

exit; 



//curl_close($ch); 

return $document



//请求URL 

$url="http://example.cn/getInfo.php"

//POST提交数据,可用HTTPWATCH查看 

$postfield="userName=test&year=2008&passWord=123456&Submit=%CC%E1%BD%BB"

//代理服务器 

$proxy ''

//请求 

$str=curlrequest($url,$postfield,$proxy); 

//输出结果 

echo $str;
DE>
  评论这张
 
阅读(2403)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018