Email subject in content language instead of sending user's UI language
[lhc/web/wiklou.git] / includes / HttpFunctions.php
index a9fb13c..9ab7447 100644 (file)
@@ -4,18 +4,27 @@
  * Various HTTP related functions
  */
 class Http {
+       static function get( $url, $timeout = 'default' ) {
+               return Http::request( "GET", $url, $timeout );
+       }
+
+       static function post( $url, $timeout = 'default' ) {
+               return Http::request( "POST", $url, $timeout );
+       }
+
        /**
         * Get the contents of a file by HTTP
         *
         * if $timeout is 'default', $wgHTTPTimeout is used
         */
-       static function get( $url, $timeout = 'default' ) {
+       static function request( $method, $url, $timeout = 'default' ) {
                global $wgHTTPTimeout, $wgHTTPProxy, $wgVersion, $wgTitle;
 
+               wfDebug( __METHOD__ . ": $method $url\n" );
                # Use curl if available
                if ( function_exists( 'curl_init' ) ) {
                        $c = curl_init( $url );
-                       if ( wfIsLocalURL( $url ) ) {
+                       if ( self::isLocalURL( $url ) ) {
                                curl_setopt( $c, CURLOPT_PROXY, 'localhost:80' );
                        } else if ($wgHTTPProxy) {
                                curl_setopt($c, CURLOPT_PROXY, $wgHTTPProxy);
@@ -26,6 +35,10 @@ class Http {
                        }
                        curl_setopt( $c, CURLOPT_TIMEOUT, $timeout );
                        curl_setopt( $c, CURLOPT_USERAGENT, "MediaWiki/$wgVersion" );
+                       if ( $method == 'POST' )
+                               curl_setopt( $c, CURLOPT_POST, true );
+                       else
+                               curl_setopt( $c, CURLOPT_CUSTOMREQUEST, $method );
 
                        # Set the referer to $wgTitle, even in command-line mode
                        # This is useful for interwiki transclusion, where the foreign
@@ -45,12 +58,29 @@ class Http {
                        if ( curl_getinfo( $c, CURLINFO_HTTP_CODE ) != 200 ) {
                                $text = false;
                        }
+                       # Don't return truncated output
+                       if ( curl_errno( $c ) != CURLE_OK ) {
+                               $text = false;
+                       }
                        curl_close( $c );
                } else {
-                       # Otherwise use file_get_contents, or its compatibility function from GlobalFunctions.php
+                       # Otherwise use file_get_contents...
                        # This may take 3 minutes to time out, and doesn't have local fetch capabilities
+
+                       global $wgVersion;
+                       $headers = array( "User-Agent: MediaWiki/$wgVersion" );
+                       if( strcasecmp( $method, 'post' ) == 0 ) {
+                               // Required for HTTP 1.0 POSTs
+                               $headers[] = "Content-Length: 0";
+                       }
+                       $opts = array(
+                               'http' => array(
+                                       'method' => $method,
+                                       'header' => implode( "\r\n", $headers ) ) );
+                       $ctx = stream_context_create($opts);
+
                        $url_fopen = ini_set( 'allow_url_fopen', 1 );
-                       $text = file_get_contents( $url );
+                       $text = file_get_contents( $url, false, $ctx );
                        ini_set( 'allow_url_fopen', $url_fopen );
                }
                return $text;
@@ -88,4 +118,4 @@ class Http {
                return false;
        }
 }
-?>
+