DedeHttpDown下载类

这个类的使用方法:
下载网页

Java代码  

  1. <?php  
  2. $httpdown = new DedeHttpDown();  
  3. $httpdown->OpenUrl("http://www.dedecms.com");  
  4. echo $httpdown->GetHtml();  
  5.   
  6. //如果保存为文件则用 $hd->SaveBin("dede.html");  
  7. $httpdown->Close();  
  8. ?>  

如果下载图片 并保存,可以用

Java代码  

  1. <?php  
  2. $httpdown = new DedeHttpDown();  
  3. $httpdown->OpenUrl("http://prato.bokele.com/0/0/399/bGluMi5qcGc=.jpg");  
  4. echo $httpdown->SaveBin("test.jpg");  
  5. $httpdown->Close();  
  6. echo "<img src='test.jpg'>";  
  7. ?>  

 DedeHttpDown

Java代码  

  1. <?php  
  2. @set_time_limit(0);  
  3.   
  4. class DedeHttpDown  
  5. {  
  6.     var $m_url = '';  
  7.     var $m_urlpath = '';  
  8.     var $m_scheme = 'http';  
  9.     var $m_host = '';  
  10.     var $m_port = '80';  
  11.     var $m_user = '';  
  12.     var $m_pass = '';  
  13.     var $m_path = '/';  
  14.     var $m_query = '';  
  15.     var $m_fp = '';  
  16.     var $m_error = '';  
  17.     var $m_httphead = '';  
  18.     var $m_html = '';  
  19.     var $m_puthead = '';  
  20.     var $BaseUrlPath = '';  
  21.     var $HomeUrl = '';  
  22.     var $reTry = 0;  
  23.     var $JumpCount = 0;  
  24.   
  25.     //初始化系统  
  26.     function PrivateInit($url)  
  27.     {  
  28.         if($url=='') {  
  29.             return ;  
  30.         }  
  31.         $urls = '';  
  32.         $urls = @parse_url($url);  
  33.         $this->m_url = $url;  
  34.         if(is_array($urls))  
  35.         {  
  36.             $this->m_host = $urls["host"];  
  37.             if(!empty($urls["scheme"]))  
  38.             {  
  39.                 $this->m_scheme = $urls["scheme"];  
  40.             }  
  41.             if(!empty($urls["user"]))  
  42.             {  
  43.                 $this->m_user = $urls["user"];  
  44.             }  
  45.             if(!empty($urls["pass"]))  
  46.             {  
  47.                 $this->m_pass = $urls["pass"];  
  48.             }  
  49.             if(!empty($urls["port"]))  
  50.             {  
  51.                 $this->m_port = $urls["port"];  
  52.             }  
  53.             if(!empty($urls["path"]))  
  54.             {  
  55.                 $this->m_path = $urls["path"];  
  56.             }  
  57.             $this->m_urlpath = $this->m_path;  
  58.             if(!empty($urls["query"]))  
  59.             {  
  60.                 $this->m_query = $urls["query"];  
  61.                 $this->m_urlpath .= "?".$this->m_query;  
  62.             }  
  63.             $this->HomeUrl = $urls["host"];  
  64.             $this->BaseUrlPath = $this->HomeUrl.$urls["path"];  
  65.             $this->BaseUrlPath = preg_replace("/\/([^\/]*)\.(.*)$/","/",$this->BaseUrlPath);  
  66.             $this->BaseUrlPath = preg_replace("/\/$/","",$this->BaseUrlPath);  
  67.         }  
  68.     }  
  69.   
  70.     function ResetAny()  
  71.     {  
  72.         //重设各参数  
  73.         $this->m_url = "";  
  74.         $this->m_urlpath = "";  
  75.         $this->m_scheme = "http";  
  76.         $this->m_host = "";  
  77.         $this->m_port = "80";  
  78.         $this->m_user = "";  
  79.         $this->m_pass = "";  
  80.         $this->m_path = "/";  
  81.         $this->m_query = "";  
  82.         $this->m_error = "";  
  83.     }  
  84.   
  85.     //打开指定网址  
  86.     function OpenUrl($url,$requestType="GET")  
  87.     {  
  88.         $this->ResetAny();  
  89.         $this->JumpCount = 0;  
  90.         $this->m_httphead = Array() ;  
  91.         $this->m_html = '';  
  92.         $this->reTry = 0;  
  93.         $this->Close();  
  94.   
  95.         //初始化系统  
  96.         $this->PrivateInit($url);  
  97.         $this->PrivateStartSession($requestType);  
  98.     }  
  99.   
  100.     //转到303重定向网址  
  101.     function JumpOpenUrl($url)  
  102.     {  
  103.         $this->ResetAny();  
  104.         $this->JumpCount++;  
  105.         $this->m_httphead = Array() ;  
  106.         $this->m_html = "";  
  107.         $this->Close();  
  108.   
  109.         //初始化系统  
  110.         $this->PrivateInit($url);  
  111.         $this->PrivateStartSession('GET');  
  112.     }  
  113.   
  114.     //获得某操作错误的原因  
  115.     function printError()  
  116.     {  
  117.         echo "错误信息:".$this->m_error;  
  118.         echo "<br/>具体返回头:<br/>";  
  119.         foreach($this->m_httphead as $k=>$v){ echo "$k => $v <br/>\r\n"; }  
  120.     }  
  121.   
  122.     //判别用Get方法发送的头的应答结果是否正确  
  123.     function IsGetOK()  
  124.     {  
  125.         if( ereg("^2",$this->GetHead("http-state")) )  
  126.         {  
  127.             return true;  
  128.         }  
  129.         else  
  130.         {  
  131.             $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br/>";  
  132.             return false;  
  133.         }  
  134.     }  
  135.   
  136.     //看看返回的网页是否是text类型  
  137.     function IsText()  
  138.     {  
  139.         if( ereg("^2",$this->GetHead("http-state")) && eregi("text|xml",$this->GetHead("content-type")) )  
  140.         {  
  141.             return true;  
  142.         }  
  143.         else  
  144.         {  
  145.             $this->m_error .= "内容为非文本类型或网址重定向<br/>";  
  146.             return false;  
  147.         }  
  148.     }  
  149.   
  150.     //判断返回的网页是否是特定的类型  
  151.     function IsContentType($ctype)  
  152.     {  
  153.         if(ereg("^2",$this->GetHead("http-state"))  
  154.         && $this->GetHead("content-type")==strtolower($ctype))  
  155.         {   return true; }  
  156.         else  
  157.         {  
  158.             $this->m_error .= "类型不对 ".$this->GetHead("content-type")."<br/>";  
  159.             return false;  
  160.         }  
  161.     }  
  162.   
  163.     //用Http协议下载文件  
  164.     function SaveToBin($savefilename)  
  165.     {  
  166.         if(!$this->IsGetOK())  
  167.         {  
  168.             return false;  
  169.         }  
  170.         if(@feof($this->m_fp))  
  171.         {  
  172.             $this->m_error = "连接已经关闭!"; return false;  
  173.         }  
  174.         $fp = fopen($savefilename,"w");  
  175.         while(!feof($this->m_fp))  
  176.         {  
  177.             fwrite($fp,fread($this->m_fp,1024));  
  178.         }  
  179.         fclose($this->m_fp);  
  180.         fclose($fp);  
  181.         return true;  
  182.     }  
  183.   
  184.     //保存网页内容为Text文件  
  185.     function SaveToText($savefilename)  
  186.     {  
  187.         if($this->IsText())  
  188.         {  
  189.             $this->SaveBinFile($savefilename);  
  190.         }  
  191.         else  
  192.         {  
  193.             return "";  
  194.         }  
  195.     }  
  196.   
  197.     //用Http协议获得一个网页的内容  
  198.     function GetHtml()  
  199.     {  
  200.         if(!$this->IsText())  
  201.         {  
  202.             return '';  
  203.         }  
  204.         if($this->m_html!='')  
  205.         {  
  206.             return $this->m_html;  
  207.         }  
  208.         if(!$this->m_fp||@feof($this->m_fp))  
  209.         {  
  210.             return '';  
  211.         }  
  212.         while(!feof($this->m_fp))  
  213.         {  
  214.             $this->m_html .= fgets($this->m_fp,256);  
  215.         }  
  216.         @fclose($this->m_fp);  
  217.         return $this->m_html;  
  218.     }  
  219.   
  220.     //开始HTTP会话  
  221.     function PrivateStartSession($requestType="GET")  
  222.     {  
  223.         if(!$this->PrivateOpenHost())  
  224.         {  
  225.             $this->m_error .= "打开远程主机出错!";  
  226.             return false;  
  227.         }  
  228.         $this->reTry++;  
  229.         if($this->GetHead("http-edition")=="HTTP/1.1")  
  230.         {  
  231.             $httpv = "HTTP/1.1";  
  232.         }  
  233.         else  
  234.         {  
  235.             $httpv = "HTTP/1.0";  
  236.         }  
  237.         $ps = explode('?',$this->m_urlpath);  
  238.   
  239.         $headString = '';  
  240.   
  241.         //发送固定的起始请求头GET、Host信息  
  242.         if($requestType=="GET")  
  243.         {  
  244.             $headString .= "GET ".$this->m_urlpath." $httpv\r\n";  
  245.         }  
  246.         else  
  247.         {  
  248.             $headString .= "POST ".$ps[0]." $httpv\r\n";  
  249.         }  
  250.         $this->m_puthead["Host"] = $this->m_host;  
  251.   
  252.         //发送用户自定义的请求头  
  253.         if(!isset($this->m_puthead["Accept"]))  
  254.         {  
  255.             $this->m_puthead["Accept"] = "*/*";  
  256.         }  
  257.         if(!isset($this->m_puthead["User-Agent"]))  
  258.         {  
  259.             $this->m_puthead["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)";  
  260.         }  
  261.         if(!isset($this->m_puthead["Refer"]))  
  262.         {  
  263.             $this->m_puthead["Refer"] = "http://".$this->m_puthead["Host"];  
  264.         }  
  265.   
  266.         foreach($this->m_puthead as $k=>$v)  
  267.         {  
  268.             $k = trim($k);  
  269.             $v = trim($v);  
  270.             if($k!=""&&$v!="")  
  271.             {  
  272.                 $headString .= "$k: $v\r\n";  
  273.             }  
  274.         }  
  275.         fputs($this->m_fp, $headString);  
  276.         if($requestType=="POST")  
  277.         {  
  278.             $postdata = "";  
  279.             if(count($ps)>1)  
  280.             {  
  281.                 for($i=1;$i<count($ps);$i++)  
  282.                 {  
  283.                     $postdata .= $ps[$i];  
  284.                 }  
  285.             }  
  286.             else  
  287.             {  
  288.                 $postdata = "OK";  
  289.             }  
  290.             $plen = strlen($postdata);  
  291.             fputs($this->m_fp,"Content-Type: application/x-www-form-urlencoded\r\n");  
  292.             fputs($this->m_fp,"Content-Length: $plen\r\n");  
  293.         }  
  294.   
  295.         //发送固定的结束请求头  
  296.         //HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束  
  297.         if($httpv=="HTTP/1.1")  
  298.         {  
  299.             fputs($this->m_fp,"Connection: Close\r\n\r\n");  
  300.         }  
  301.         else  
  302.         {  
  303.             fputs($this->m_fp,"\r\n");  
  304.         }  
  305.         if($requestType=="POST")  
  306.         {  
  307.             fputs($this->m_fp,$postdata);  
  308.         }  
  309.   
  310.         //获取应答头状态信息  
  311.         $httpstas = explode(" ",fgets($this->m_fp,256));  
  312.         $this->m_httphead["http-edition"] = trim($httpstas[0]);  
  313.         $this->m_httphead["http-state"] = trim($httpstas[1]);  
  314.         $this->m_httphead["http-describe"] = "";  
  315.         for($i=2;$i<count($httpstas);$i++)  
  316.         {  
  317.             $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]);  
  318.         }  
  319.   
  320.         //获取详细应答头  
  321.         while(!feof($this->m_fp))  
  322.         {  
  323.             $line = trim(fgets($this->m_fp,256));  
  324.             if($line == "")  
  325.             {  
  326.                 break;  
  327.             }  
  328.             $hkey = "";  
  329.             $hvalue = "";  
  330.             $v = 0;  
  331.             for($i=0;$i<strlen($line);$i++)  
  332.             {  
  333.                 if($v==1)  
  334.                 {  
  335.                     $hvalue .= $line[$i];  
  336.                 }  
  337.                 if($line[$i]==":")  
  338.                 {  
  339.                     $v = 1;  
  340.                 }  
  341.                 if($v==0)  
  342.                 {  
  343.                     $hkey .= $line[$i];  
  344.                 }  
  345.             }  
  346.             $hkey = trim($hkey);  
  347.             if($hkey!="")  
  348.             {  
  349.                 $this->m_httphead[strtolower($hkey)] = trim($hvalue);  
  350.             }  
  351.         }  
  352.   
  353.         //如果连接被不正常关闭,重试  
  354.         if(feof($this->m_fp))  
  355.         {  
  356.             if($this->reTry > 10)  
  357.             {  
  358.                 return false;  
  359.             }  
  360.             $this->PrivateStartSession($requestType);  
  361.         }  
  362.   
  363.         //判断是否是3xx开头的应答  
  364.         if(ereg("^3",$this->m_httphead["http-state"]))  
  365.         {  
  366.             if($this->JumpCount > 3)  
  367.             {  
  368.                 return;  
  369.             }  
  370.             if(isset($this->m_httphead["location"]))  
  371.             {  
  372.                 $newurl = $this->m_httphead["location"];  
  373.                 if(eregi("^http",$newurl))  
  374.                 {  
  375.                     $this->JumpOpenUrl($newurl);  
  376.                 }  
  377.                 else  
  378.                 {  
  379.                     $newurl = $this->FillUrl($newurl);  
  380.                     $this->JumpOpenUrl($newurl);  
  381.                 }  
  382.             }  
  383.             else  
  384.             {  
  385.                 $this->m_error = "无法识别的答复!";  
  386.             }  
  387.         }  
  388.     }  
  389.   
  390.     //获得一个Http头的值  
  391.     function GetHead($headname)  
  392.     {  
  393.         $headname = strtolower($headname);  
  394.         return isset($this->m_httphead[$headname]) ? $this->m_httphead[$headname] : '';  
  395.     }  
  396.   
  397.     //设置Http头的值  
  398.     function SetHead($skey,$svalue)  
  399.     {  
  400.         $this->m_puthead[$skey] = $svalue;  
  401.     }  
  402.   
  403.     //打开连接  
  404.     function PrivateOpenHost()  
  405.     {  
  406.         if($this->m_host=="")  
  407.         {  
  408.             return false;  
  409.         }  
  410.         $errno = "";  
  411.         $errstr = "";  
  412.         $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10);  
  413.         if(!$this->m_fp)  
  414.         {  
  415.             $this->m_error = $errstr;  
  416.             return false;  
  417.         }  
  418.         else  
  419.         {  
  420.             return true;  
  421.         }  
  422.     }  
  423.   
  424.     //关闭连接  
  425.     function Close()  
  426.     {  
  427.         @fclose($this->m_fp);  
  428.     }  
  429.   
  430.     //补全相对网址  
  431.     function FillUrl($surl)  
  432.     {  
  433.         $i = 0;  
  434.         $dstr = "";  
  435.         $pstr = "";  
  436.         $okurl = "";  
  437.         $pathStep = 0;  
  438.         $surl = trim($surl);  
  439.         if($surl=="")  
  440.         {  
  441.             return "";  
  442.         }  
  443.         $pos = strpos($surl,"#");  
  444.         if($pos>0)  
  445.         {  
  446.             $surl = substr($surl,0,$pos);  
  447.         }  
  448.         if($surl[0]=="/")  
  449.         {  
  450.             $okurl = "http://".$this->HomeUrl.$surl;  
  451.         }  
  452.         else if($surl[0]==".")  
  453.         {  
  454.             if(strlen($surl)<=1)  
  455.             {  
  456.                 return "";  
  457.             }  
  458.             else if($surl[1]=="/")  
  459.             {  
  460.                 $okurl = "http://".$this->BaseUrlPath."/".substr($surl,2,strlen($surl)-2);  
  461.             }  
  462.             else  
  463.             {  
  464.                 $urls = explode("/",$surl);  
  465.                 foreach($urls as $u)  
  466.                 {  
  467.                     if($u=="..")  
  468.                     {  
  469.                         $pathStep++;  
  470.                     }  
  471.                     else if($i<count($urls)-1)  
  472.                     {  
  473.                         $dstr .= $urls[$i]."/";  
  474.                     }  
  475.                     else  
  476.                     {  
  477.                         $dstr .= $urls[$i];  
  478.                     }  
  479.                     $i++;  
  480.                 }  
  481.                 $urls = explode("/",$this->BaseUrlPath);  
  482.                 if(count($urls) <= $pathStep)  
  483.                 {  
  484.                     return "";  
  485.                 }  
  486.                 else  
  487.                 {  
  488.                     $pstr = "http://";  
  489.                     for($i=0;$i<count($urls)-$pathStep;$i++)  
  490.                     {  
  491.                         $pstr .= $urls[$i]."/";  
  492.                     }  
  493.                     $okurl = $pstr.$dstr;  
  494.                 }  
  495.             }  
  496.         }  
  497.         else  
  498.         {  
  499.             if(strlen($surl)<7)  
  500.             {  
  501.                 $okurl = "http://".$this->BaseUrlPath."/".$surl;  
  502.             }  
  503.             else if(strtolower(substr($surl,0,7))=="http://")  
  504.             {  
  505.                 $okurl = $surl;  
  506.             }  
  507.             else  
  508.             {  
  509.                 $okurl = "http://".$this->BaseUrlPath."/".$surl;  
  510.             }  
  511.         }  
  512.         $okurl = eregi_replace("^(http://)","",$okurl);  
  513.         $okurl = eregi_replace("/{1,}","/",$okurl);  
  514.         return "http://".$okurl;  
  515.     }  
  516. }  
  517.   
  518. ?>  
时间: 2016-05-12

DedeHttpDown下载类的相关文章

用PHP写的一个HTTP下载类

在php中,下载http资源比较常用的一种做法就是用 file_get_contents 这个函数,但这函数无法获得http头的信息,会给一些应用带来不方便,因此我写了一个http下载类来解决这个问题,测试感觉速度和file_get_contents相差无几. <? class DedeHttpDown { var $m_url = ""; var $m_urlpath = ""; var $m_scheme = "http"; var $

下载类网站TITLE写法对比实验结果

下载 下载类网站内页TITLE写法主要分3种: XXXXXX迅雷下载,XXXXXXBT下载,XXXXXX电驴下载 XXXXXX迅雷下载,BT下载,电驴下载 XXXXXX迅雷BT电驴下载 以上三种写法,哪种可以得到更好的综合排名呢? 搜索引擎对TITLE是如何分析? 做个SEO实验,看看会是怎样的结果. 实验思路: 建立3个相似页面,分别用以上3种标题.等收录后看排名顺序. 实验注意事项: 需要使用没有干扰的"关键字",搜索结果内无其他页面: 这里我创造了一个词"波测卡&quo

剖析文档下载类网站优化细节

文档下载类站点也属于提供文件下载的网站,此类站点在做优化的时候,需要注意哪些地方的细节问题呢?最近笔者看到了一个这样的站点,下面结合这个案例来分析下此类站点如何去做优化,其实许多地方都与其他网站类似,没有什么值得分析的.例如:网站导航.页面代码.关键词等,当然也有一些地方与其他类型的站点不同.好了先看下这个站点基本SEO数据:收录2180.反链1380.域名时间1年21天.百度权重1.谷歌PR1.从百度权重1就可以大致清楚这个站点流量不怎么样,笔者看了下就一个关键词有点排名,可见这个站点的优化没

关于下载类网站的SEO优化技巧

现在的时代再也不是那个网络信息局限的年代了,随着社会经济的高速发展,网络信息技术也日新月异发展起来.几年前,人们还觉得在网上下歌是一件特别技术的事.但时至今日在网上下歌下电影也没有什么好奇怪的了.但是对于网站主,对于下载网站而言,现在的下载没有难度愈发普及.一定程度上直接造成了下载类网站的压力加大,流量锐减.以为正文是ZZD5博客网作者经过自己的一些实践,综合互联网上的一些技巧而总结出,本人的表达能力有限,希望各位朋友们对对提出宝贵意见. 现在的网络世界是流量为王的年代,没有流量你的网站就没有任

草根站长图说软件下载类站点的站内优化心得

毕业后就开始从事seo的工作.稳定的工作,稳定的工资让不安定的笔者开始产生自主建站创业的想法,于是笔最后据顶辞职选择加入广大的草根站长阶层.但是理想有多丰满,现实就有多骨感.本来以为自己做一个站点就可以轻轻松松的在互联网上淘金,却没想到站点上线一阶段后,每天的流量都是少的可怜,因为笔者之前的工作是一名外链专员,对于站内优化并不精通,一直疏于对站内的优化.后来到A5上看了很多文章才发现原来站内的优化和站外优化一样都非常的重要.于是经过一阶段的站内优化处理.站点终于有了起色.下面笔者就分享几点站内优

总结电子书下载类网站几种有效的推广方法

中介交易 SEO诊断 淘宝客 云主机 技术大厅 手头上有一个电子书下载类的网站,互联网上类似这样的网站不计其数了.可不管什么类型的网站,第一步总是想办法去做推广,这里就不谈SEO层面的了,抛开百度优化,其实还有N种推广和营销手段,只是这些方法许多个人站长还不熟悉,例如:笔者这样的的菜鸟站长.把握好这些推广方法需要时间和实战经验,百度优化越来越难做,运用其他方法或手段推广自己的网站,这已然成为站长们不得不学习和研究的了.但说实话针对不同类型的网站,推广方法肯定有区别,有时候一些小点子能够起到不错的

VB.Net Socket实现Http文件上传及下载类如何使用

问题描述 VB.Net Socket实现Http文件上传及下载类如何使用 门外汉求指教. 1.平台:SQL 2008 & appserv & mysql,VS2010 2.问题:①为实现文件上传.下载功能: ②参照了http://www.newxing.com/Tech/DotNet/VBDotNet/Socket_213.html 3.提问:①已添加上述网站中WebClient模块,现调用httpClient.UploadFile httpClient.DownLoadFile,WinF

gd库图片下载类实现下载网页所有图片的php代码_php实例

php代码如下: 复制代码 代码如下: <?php header("Content-type:text/html ; charset=utf-8"); if (!empty($_POST['submit'])){ $url = $_POST['url']; //为了获取相对路径的图片所做的操作 $url_fields = parse_url($url); $main_url = $url_fields['host']; $base_url = substr($url,0,strr

php远程下载类分享_php技巧

本文实例为大家分享了php远程下载类,如下 <?php /** * 下载远程文件类支持断点续传 */ class HttpDownload { private $m_url = ""; private $m_urlpath = ""; private $m_scheme = "http"; private $m_host = ""; private $m_port = "80"; private $m