Make WordPress Core


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/class-snoopy.php

    r4075 r3235  
    4040{
    4141    /**** Public variables ****/
    42 
     42   
    4343    /* user definable vars */
    4444
     
    4949    var $proxy_user     =   "";                 // proxy user to use
    5050    var $proxy_pass     =   "";                 // proxy password to use
    51 
     51   
    5252    var $agent          =   "Snoopy v1.2.3";    // agent we masquerade as
    5353    var $referer        =   "";                 // referer info to pass
     
    6767                                                // NOTE: this currently does not respect
    6868                                                // dates, domains or paths.
    69 
     69   
    7070    var $user           =   "";                 // user for http authentication
    7171    var $pass           =   "";                 // password for http authentication
    72 
     72   
    7373    // http accept types
    7474    var $accept         =   "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
    75 
     75   
    7676    var $results        =   "";                 // where the content is put
    77 
     77       
    7878    var $error          =   "";                 // error messages sent here
    7979    var $response_code  =   "";                 // response code returned from server
    8080    var $headers        =   array();            // headers returned from server sent here
    81     var $maxlength      =   8192;               // max return data length (body)
     81    var $maxlength      =   500000;             // max return data length (body)
    8282    var $read_timeout   =   0;                  // timeout on read operations, in seconds
    8383                                                // supported only since PHP 4 Beta 4
     
    101101                                                // as these functions are not stable
    102102                                                // as of this Snoopy release.
    103 
    104     /**** Private variables ****/
    105 
     103   
     104    /**** Private variables ****/   
     105   
    106106    var $_maxlinelen    =   4096;               // max line length (headers)
    107 
     107   
    108108    var $_httpmethod    =   "GET";              // default http request method
    109109    var $_httpversion   =   "HTTP/1.0";         // default http request version
     
    115115    var $_frameurls     =   array();            // frame src urls
    116116    var $_framedepth    =   0;                  // increments on frame depth
    117 
     117   
    118118    var $_isproxy       =   false;              // set if using a proxy server
    119119    var $_fp_timeout    =   30;                 // timeout for socket connection
     
    130130    function fetch($URI)
    131131    {
    132 
     132   
    133133        //preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS);
    134134        $URI_PARTS = parse_url($URI);
     
    141141        if (empty($URI_PARTS["path"]))
    142142            $URI_PARTS["path"] = '';
    143 
     143               
    144144        switch(strtolower($URI_PARTS["scheme"]))
    145145        {
     
    161161                        $this->_httprequest($path, $fp, $URI, $this->_httpmethod);
    162162                    }
    163 
     163                   
    164164                    $this->_disconnect($fp);
    165165
     
    184184                        $frameurls = $this->_frameurls;
    185185                        $this->_frameurls = array();
    186 
     186                       
    187187                        while(list(,$frameurl) = each($frameurls))
    188188                        {
     
    195195                                break;
    196196                        }
    197                     }
     197                    }                   
    198198                }
    199199                else
     
    201201                    return false;
    202202                }
    203                 return true;
     203                return true;                   
    204204                break;
    205205            case "https":
     
    255255                            break;
    256256                    }
    257                 }
    258                 return true;
     257                }                   
     258                return true;                   
    259259                break;
    260260            default:
     
    263263                return false;
    264264                break;
    265         }
     265        }       
    266266        return true;
    267267    }
     
    281281    {
    282282        unset($postdata);
    283 
     283       
    284284        $postdata = $this->_prepare_post_body($formvars, $formfiles);
    285 
     285           
    286286        $URI_PARTS = parse_url($URI);
    287287        if (!empty($URI_PARTS["user"]))
     
    313313                        $this->_httprequest($path, $fp, $URI, $this->_submit_method, $this->_submit_type, $postdata);
    314314                    }
    315 
     315                   
    316316                    $this->_disconnect($fp);
    317317
     
    320320                        /* url was redirected, check if we've hit the max depth */
    321321                        if($this->maxredirs > $this->_redirectdepth)
    322                         {
     322                        {                       
    323323                            if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))
    324                                 $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);
    325 
     324                                $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);                     
     325                           
    326326                            // only follow redirect if it's on this site, or offsiteok is true
    327327                            if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok)
     
    342342                        $frameurls = $this->_frameurls;
    343343                        $this->_frameurls = array();
    344 
     344                       
    345345                        while(list(,$frameurl) = each($frameurls))
    346                         {
     346                        {                                                       
    347347                            if($this->_framedepth < $this->maxframes)
    348348                            {
     
    353353                                break;
    354354                        }
    355                     }
    356 
     355                    }                   
     356                   
    357357                }
    358358                else
     
    360360                    return false;
    361361                }
    362                 return true;
     362                return true;                   
    363363                break;
    364364            case "https":
     
    387387                    /* url was redirected, check if we've hit the max depth */
    388388                    if($this->maxredirs > $this->_redirectdepth)
    389                     {
     389                    {                       
    390390                        if(!preg_match("|^".$URI_PARTS["scheme"]."://|", $this->_redirectaddr))
    391                             $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);
     391                            $this->_redirectaddr = $this->_expandlinks($this->_redirectaddr,$URI_PARTS["scheme"]."://".$URI_PARTS["host"]);                     
    392392
    393393                        // only follow redirect if it's on this site, or offsiteok is true
     
    411411
    412412                    while(list(,$frameurl) = each($frameurls))
    413                     {
     413                    {                                                       
    414414                        if($this->_framedepth < $this->maxframes)
    415415                        {
     
    420420                            break;
    421421                    }
    422                 }
    423                 return true;
     422                }                   
     423                return true;                   
    424424                break;
    425 
     425               
    426426            default:
    427427                // not a valid protocol
     
    429429                return false;
    430430                break;
    431         }
     431        }       
    432432        return true;
    433433    }
     
    443443    {
    444444        if ($this->fetch($URI))
    445         {
     445        {           
    446446            if($this->lastredirectaddr)
    447447                $URI = $this->lastredirectaddr;
     
    471471    function fetchform($URI)
    472472    {
    473 
     473       
    474474        if ($this->fetch($URI))
    475         {
     475        {           
    476476
    477477            if(is_array($this->results))
     
    482482            else
    483483                $this->results = $this->_stripform($this->results);
    484 
     484           
    485485            return true;
    486486        }
     
    488488            return false;
    489489    }
    490 
    491 
     490   
     491   
    492492/*======================================================================*\
    493493    Function:   fetchtext
     
    500500    {
    501501        if($this->fetch($URI))
    502         {
     502        {           
    503503            if(is_array($this->results))
    504504            {
     
    524524    {
    525525        if($this->submit($URI,$formvars, $formfiles))
    526         {
     526        {           
    527527            if($this->lastredirectaddr)
    528528                $URI = $this->lastredirectaddr;
     
    558558    {
    559559        if($this->submit($URI,$formvars, $formfiles))
    560         {
     560        {           
    561561            if($this->lastredirectaddr)
    562562                $URI = $this->lastredirectaddr;
     
    582582    }
    583583
    584 
     584   
    585585
    586586/*======================================================================*\
     
    594594    }
    595595
    596 
     596   
    597597/*======================================================================*\
    598598    Function:   set_submit_normal
     
    605605    }
    606606
    607 
    608 
     607   
     608   
    609609
    610610/*======================================================================*\
    611611    Private functions
    612612\*======================================================================*/
    613 
    614 
     613   
     614   
    615615/*======================================================================*\
    616616    Function:   _striplinks
     
    621621
    622622    function _striplinks($document)
    623     {
     623    {   
    624624        preg_match_all("'<\s*a\s.*?href\s*=\s*          # find <a href=
    625625                        ([\"\'])?                   # find single or double quote
     
    627627                                                    # quote, otherwise match up to next space
    628628                        'isx",$document,$links);
    629 
     629                       
    630630
    631631        // catenate the non-empty matches from the conditional subpattern
     
    635635            if(!empty($val))
    636636                $match[] = $val;
    637         }
    638 
     637        }               
     638       
    639639        while(list($key,$val) = each($links[3]))
    640640        {
    641641            if(!empty($val))
    642642                $match[] = $val;
    643         }
    644 
     643        }       
     644       
    645645        // return the links
    646646        return $match;
     
    655655
    656656    function _stripform($document)
    657     {
     657    {   
    658658        preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements);
    659 
     659       
    660660        // catenate the matches
    661661        $match = implode("\r\n",$elements[0]);
    662 
     662               
    663663        // return the links
    664664        return $match;
    665665    }
    666666
    667 
    668 
     667   
     668   
    669669/*======================================================================*\
    670670    Function:   _striptext
     
    676676    function _striptext($document)
    677677    {
    678 
     678       
    679679        // I didn't use preg eval (//e) since that is only available in PHP 4.0.
    680680        // so, list your entities one by one here. I included some of the
    681681        // more common ones.
    682 
     682                               
    683683        $search = array("'<script[^>]*?>.*?</script>'si",   // strip out javascript
    684684                        "'<[\/\!]*?[^<>]*?>'si",            // strip out html tags
     
    729729                            "ß",
    730730                        );
    731 
     731                   
    732732        $text = preg_replace($search,$replace,$document);
    733 
     733                               
    734734        return $text;
    735735    }
     
    745745    function _expandlinks($links,$URI)
    746746    {
    747 
     747       
    748748        preg_match("/^[^\?]+/",$URI,$match);
    749749
     
    753753        $match_root =
    754754        $match_part["scheme"]."://".$match_part["host"];
    755 
     755               
    756756        $search = array(    "|^http://".preg_quote($this->host)."|i",
    757757                            "|^(\/)|i",
     
    760760                            "|/[^\/]+/\.\./|"
    761761                        );
    762 
     762                       
    763763        $replace = array(   "",
    764764                            $match_root."/",
     
    766766                            "/",
    767767                            "/"
    768                         );
    769 
     768                        );         
     769               
    770770        $expandedLinks = preg_replace($search,$replace,$links);
    771771
     
    780780                $URI        the full URI
    781781                $body       body contents to send if any (POST)
    782     Output:
    783 \*======================================================================*/
    784 
     782    Output:     
     783\*======================================================================*/
     784   
    785785    function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="")
    786786    {
     
    788788        if($this->passcookies && $this->_redirectaddr)
    789789            $this->setcookies();
    790 
     790           
    791791        $URI_PARTS = parse_url($URI);
    792792        if(empty($url))
    793793            $url = "/";
    794         $headers = $http_method." ".$url." ".$this->_httpversion."\r\n";
     794        $headers = $http_method." ".$url." ".$this->_httpversion."\r\n";       
    795795        if(!empty($this->agent))
    796796            $headers .= "User-Agent: ".$this->agent."\r\n";
     
    806806            $headers .= "Referer: ".$this->referer."\r\n";
    807807        if(!empty($this->cookies))
    808         {
     808        {           
    809809            if(!is_array($this->cookies))
    810810                $this->cookies = (array)$this->cookies;
    811 
     811   
    812812            reset($this->cookies);
    813813            if ( count($this->cookies) > 0 ) {
     
    832832            $headers .= "\r\n";
    833833        }
    834         if(!empty($body))
     834        if(!empty($body))   
    835835            $headers .= "Content-length: ".strlen($body)."\r\n";
    836         if(!empty($this->user) || !empty($this->pass))
     836        if(!empty($this->user) || !empty($this->pass)) 
    837837            $headers .= "Authorization: Basic ".base64_encode($this->user.":".$this->pass)."\r\n";
    838 
     838       
    839839        //add proxy auth headers
    840         if(!empty($this->proxy_user))
     840        if(!empty($this->proxy_user))   
    841841            $headers .= 'Proxy-Authorization: ' . 'Basic ' . base64_encode($this->proxy_user . ':' . $this->proxy_pass)."\r\n";
    842842
    843843
    844844        $headers .= "\r\n";
    845 
     845       
    846846        // set the read timeout if needed
    847847        if ($this->read_timeout > 0)
    848848            socket_set_timeout($fp, $this->read_timeout);
    849849        $this->timed_out = false;
    850 
     850       
    851851        fwrite($fp,$headers.$body,strlen($headers.$body));
    852 
     852       
    853853        $this->_redirectaddr = false;
    854854        unset($this->headers);
    855 
     855                       
    856856        while($currentHeader = fgets($fp,$this->_maxlinelen))
    857857        {
     
    861861                return false;
    862862            }
    863 
     863               
    864864            if($currentHeader == "\r\n")
    865865                break;
    866 
     866                       
    867867            // if a header begins with Location: or URI:, set the redirect
    868868            if(preg_match("/^(Location:|URI:)/i",$currentHeader))
     
    884884                    $this->_redirectaddr = $matches[2];
    885885            }
    886 
     886       
    887887            if(preg_match("|^HTTP/|",$currentHeader))
    888888            {
     
    890890                {
    891891                    $this->status= $status[1];
    892                 }
     892                }               
    893893                $this->response_code = $currentHeader;
    894894            }
    895 
     895               
    896896            $this->headers[] = $currentHeader;
    897897        }
     
    911911            return false;
    912912        }
    913 
     913       
    914914        // check if there is a a redirect meta tag
    915 
     915       
    916916        if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
    917917
    918918        {
    919             $this->_redirectaddr = $this->_expandlinks($match[1],$URI);
     919            $this->_redirectaddr = $this->_expandlinks($match[1],$URI); 
    920920        }
    921921
     
    933933        else
    934934            $this->results = $results;
    935 
     935       
    936936        return true;
    937937    }
     
    943943                $URI        the full URI
    944944                $body       body contents to send if any (POST)
    945     Output:
    946 \*======================================================================*/
    947 
     945    Output:     
     946\*======================================================================*/
     947   
    948948    function _httpsrequest($url,$URI,$http_method,$content_type="",$body="")
    949949    {
     
    951951            $this->setcookies();
    952952
    953         $headers = array();
    954 
     953        $headers = array();     
     954                   
    955955        $URI_PARTS = parse_url($URI);
    956956        if(empty($url))
    957957            $url = "/";
    958958        // GET ... header not needed for curl
    959         //$headers[] = $http_method." ".$url." ".$this->_httpversion;
     959        //$headers[] = $http_method." ".$url." ".$this->_httpversion;       
    960960        if(!empty($this->agent))
    961961            $headers[] = "User-Agent: ".$this->agent;
     
    970970            $headers[] = "Referer: ".$this->referer;
    971971        if(!empty($this->cookies))
    972         {
     972        {           
    973973            if(!is_array($this->cookies))
    974974                $this->cookies = (array)$this->cookies;
    975 
     975   
    976976            reset($this->cookies);
    977977            if ( count($this->cookies) > 0 ) {
     
    996996                $headers[] = "Content-type: $content_type";
    997997        }
    998         if(!empty($body))
     998        if(!empty($body))   
    999999            $headers[] = "Content-length: ".strlen($body);
    1000         if(!empty($this->user) || !empty($this->pass))
     1000        if(!empty($this->user) || !empty($this->pass)) 
    10011001            $headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass);
    1002 
     1002           
    10031003        for($curr_header = 0; $curr_header < count($headers); $curr_header++) {
    10041004            $safer_header = strtr( $headers[$curr_header], "\"", " " );
    10051005            $cmdline_params .= " -H \"".$safer_header."\"";
    10061006        }
    1007 
     1007       
    10081008        if(!empty($body))
    10091009            $cmdline_params .= " -d \"$body\"";
    1010 
     1010       
    10111011        if($this->read_timeout > 0)
    10121012            $cmdline_params .= " -m ".$this->read_timeout;
    1013 
     1013       
    10141014        $headerfile = tempnam($temp_dir, "sno");
    10151015
    10161016        $safer_URI = strtr( $URI, "\"", " " ); // strip quotes from the URI to avoid shell access
    10171017        exec(escapeshellcmd($this->curl_path." -D \"$headerfile\"".$cmdline_params." \"".$safer_URI."\""),$results,$return);
    1018 
     1018       
    10191019        if($return)
    10201020        {
     
    10221022            return false;
    10231023        }
    1024 
    1025 
     1024           
     1025           
    10261026        $results = implode("\r\n",$results);
    1027 
     1027       
    10281028        $result_headers = file("$headerfile");
    1029 
     1029                       
    10301030        $this->_redirectaddr = false;
    10311031        unset($this->headers);
    1032 
     1032                       
    10331033        for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++)
    10341034        {
    1035 
     1035           
    10361036            // if a header begins with Location: or URI:, set the redirect
    10371037            if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader]))
     
    10531053                    $this->_redirectaddr = $matches[2];
    10541054            }
    1055 
     1055       
    10561056            if(preg_match("|^HTTP/|",$result_headers[$currentHeader]))
    10571057                $this->response_code = $result_headers[$currentHeader];
     
    10611061
    10621062        // check if there is a a redirect meta tag
    1063 
     1063       
    10641064        if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]*URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match))
    10651065        {
    1066             $this->_redirectaddr = $this->_expandlinks($match[1],$URI);
     1066            $this->_redirectaddr = $this->_expandlinks($match[1],$URI); 
    10671067        }
    10681068
     
    10821082
    10831083        unlink("$headerfile");
    1084 
     1084       
    10851085        return true;
    10861086    }
     
    10901090    Purpose:    set cookies for a redirection
    10911091\*======================================================================*/
    1092 
     1092   
    10931093    function setcookies()
    10941094    {
     
    11001100    }
    11011101
    1102 
     1102   
    11031103/*======================================================================*\
    11041104    Function:   _check_timeout
     
    11241124    Input:      $fp file pointer
    11251125\*======================================================================*/
    1126 
     1126   
    11271127    function _connect(&$fp)
    11281128    {
     
    11301130            {
    11311131                $this->_isproxy = true;
    1132 
     1132               
    11331133                $host = $this->proxy_host;
    11341134                $port = $this->proxy_port;
     
    11391139            $port = $this->port;
    11401140        }
    1141 
     1141   
    11421142        $this->status = 0;
    1143 
     1143       
    11441144        if($fp = fsockopen(
    11451145                    $host,
     
    11771177    Input:      $fp file pointer
    11781178\*======================================================================*/
    1179 
     1179   
    11801180    function _disconnect($fp)
    11811181    {
     
    11831183    }
    11841184
    1185 
     1185   
    11861186/*======================================================================*\
    11871187    Function:   _prepare_post_body
     
    11911191    Output:     post body
    11921192\*======================================================================*/
    1193 
     1193   
    11941194    function _prepare_post_body($formvars, $formfiles)
    11951195    {
     
    12001200        if (count($formvars) == 0 && count($formfiles) == 0)
    12011201            return;
    1202 
     1202       
    12031203        switch ($this->_submit_type) {
    12041204            case "application/x-www-form-urlencoded":
     
    12161216            case "multipart/form-data":
    12171217                $this->_mime_boundary = "Snoopy".md5(uniqid(microtime()));
    1218 
     1218               
    12191219                reset($formvars);
    12201220                while(list($key,$val) = each($formvars)) {
     
    12311231                    }
    12321232                }
    1233 
     1233               
    12341234                reset($formfiles);
    12351235                while (list($field_name, $file_names) = each($formfiles)) {
     
    12391239
    12401240                        $fp = fopen($file_name, "r");
    1241                         while (!feof($fp)) {
    1242                             $file_content .= fread($fp, filesize($file_name));
    1243                         }
     1241                        $file_content = fread($fp, filesize($file_name));
    12441242                        fclose($fp);
    12451243                        $base_name = basename($file_name);
Note: See TracChangeset for help on using the changeset viewer.