From 8f416baead93a48e5799e44b8bd2e2c4859f4e04 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 14 Sep 2007 13:18:58 +0200 Subject: auf Version 1.11 aktualisiert; Login-Bug behoben --- includes/HttpFunctions.php | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'includes/HttpFunctions.php') diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index a9fb13ca..6ea3abd0 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -4,14 +4,23 @@ * 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 ); @@ -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; } } -?> + -- cgit v1.2.3-54-g00ecf