Changeset 8079


Ignore:
Timestamp:
12/11/10 20:50:05 (9 years ago)
Author:
patdenice
Message:

feature 2057: fetchRemote can send POST data

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/include/functions.php

    r8022 r8079  
    17031703 * @return bool 
    17041704 */ 
    1705 function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0) 
     1705function fetchRemote($src, &$dest, $get_data=array(), $post_data=array(), $user_agent='Piwigo', $step=0) 
    17061706{ 
    17071707  // Try to retrieve data from local file? 
     
    17191719    } 
    17201720  } 
     1721 
     1722  // After 3 redirections, return false 
     1723  if ($step > 3) return false; 
     1724 
     1725  // Initialization 
     1726  $method  = empty($post_data) ? 'GET' : 'POST'; 
     1727  $request = empty($post_data) ? '' : http_build_query($post_data, '', '&'); 
     1728  $src     = add_url_params($src, $get_data, '&'); 
    17211729 
    17221730  // Send anonymous data to piwigo server 
     
    17381746  } 
    17391747 
    1740   // After 3 redirections, return false 
    1741   if ($step > 3) return false; 
    1742  
    17431748  // Initialize $dest 
    17441749  is_resource($dest) or $dest = ''; 
     
    17521757    @curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
    17531758    @curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     1759    if ($method == 'POST') 
     1760    { 
     1761      @curl_setopt($ch, CURLOPT_POST, 1); 
     1762      @curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
     1763    } 
    17541764    $content = @curl_exec($ch); 
    17551765    $header_length = @curl_getinfo($ch, CURLINFO_HEADER_SIZE); 
     
    17601770      if (preg_match('/Location:\s+?(.+)/', substr($content, 0, $header_length), $m)) 
    17611771      { 
    1762         return fetchRemote($m[1], $dest, $user_agent, $step+1); 
     1772        return fetchRemote($m[1], $dest, array(), array(), $user_agent, $step+1); 
    17631773      } 
    17641774      $content = substr($content, $header_length); 
     
    17711781  if (ini_get('allow_url_fopen')) 
    17721782  { 
    1773     $content = @file_get_contents($src); 
     1783    $opts = array( 
     1784      'http' => array( 
     1785        'method' => $method, 
     1786        'content' => $request, 
     1787        'user_agent' => $user_agent, 
     1788      ) 
     1789    ); 
     1790    $context = @stream_context_create($opts); 
     1791    $content = @file_get_contents($src, false, $context); 
    17741792    if ($content !== false) 
    17751793    { 
     
    17901808  } 
    17911809 
    1792   fwrite($s, 
    1793     "GET ".$path." HTTP/1.0\r\n" 
    1794     ."Host: ".$host."\r\n" 
    1795     ."User-Agent: ".$user_agent."\r\n" 
    1796     ."Accept: */*\r\n" 
    1797     ."\r\n" 
    1798   ); 
     1810  $http_request  = $method." ".$path." HTTP/1.0\r\n"; 
     1811  $http_request .= "Host: ".$host."\r\n"; 
     1812  $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; 
     1813  $http_request .= "Content-Length: ".strlen($request)."\r\n"; 
     1814  $http_request .= "User-Agent: ".$user_agent."\r\n"; 
     1815  $http_request .= "Accept: */*\r\n"; 
     1816  $http_request .= "\r\n"; 
     1817  $http_request .= $request; 
     1818 
     1819  fwrite($s, $http_request); 
    17991820 
    18001821  $i = 0; 
     
    18291850      { 
    18301851        fclose($s); 
    1831         return fetchRemote(trim($m[1]),$dest,$user_agent,$step+1); 
     1852        return fetchRemote(trim($m[1]),$dest,array(),array(),$user_agent,$step+1); 
    18321853      } 
    18331854      $i++; 
  • trunk/include/functions_url.inc.php

    r6411 r8079  
    9090 * @return string 
    9191 */ 
    92 function add_url_params($url, $params) 
     92function add_url_params($url, $params, $arg_separator='&' ) 
    9393{ 
    9494  if ( !empty($params) ) 
     
    101101      { 
    102102        $is_first = false; 
    103         $url .= ( strpos($url, '?')===false ) ? '?' :'&'; 
     103        $url .= ( strpos($url, '?')===false ) ? '?' : $arg_separator; 
    104104      } 
    105105      else 
    106106      { 
    107         $url .= '&'; 
     107        $url .= $arg_separator; 
    108108      } 
    109109      $url .= $param; 
Note: See TracChangeset for help on using the changeset viewer.