summaryrefslogtreecommitdiff
path: root/includes/HttpFunctions.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2013-01-18 16:46:04 +0100
committerPierre Schmitz <pierre@archlinux.de>2013-01-18 16:46:04 +0100
commit63601400e476c6cf43d985f3e7b9864681695ed4 (patch)
treef7846203a952e38aaf66989d0a4702779f549962 /includes/HttpFunctions.php
parent8ff01378c9e0207f9169b81966a51def645b6a51 (diff)
Update to MediaWiki 1.20.2
this update includes: * adjusted Arch Linux skin * updated FluxBBAuthPlugin * patch for https://bugzilla.wikimedia.org/show_bug.cgi?id=44024
Diffstat (limited to 'includes/HttpFunctions.php')
-rw-r--r--includes/HttpFunctions.php72
1 files changed, 50 insertions, 22 deletions
diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php
index 147823fe..8453e62c 100644
--- a/includes/HttpFunctions.php
+++ b/includes/HttpFunctions.php
@@ -1,5 +1,27 @@
<?php
/**
+ * Various HTTP related functions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup HTTP
+ */
+
+/**
* @defgroup HTTP HTTP
*/
@@ -20,8 +42,9 @@ class Http {
* - timeout Timeout length in seconds
* - postData An array of key-value pairs or a url-encoded form data
* - proxy The proxy to use.
- * Will use $wgHTTPProxy (if set) otherwise.
- * - noProxy Override $wgHTTPProxy (if set) and don't use any proxy at all.
+ * Otherwise it will use $wgHTTPProxy (if set)
+ * Otherwise it will use the environment variable "http_proxy" (if set)
+ * - noProxy Don't use any proxy at all. Takes precedence over proxy value(s).
* - sslVerifyHost (curl only) Verify hostname against certificate
* - sslVerifyCert (curl only) Verify SSL certificate
* - caInfo (curl only) Provide CA information
@@ -42,9 +65,6 @@ class Http {
}
$req = MWHttpRequest::factory( $url, $options );
- if( isset( $options['userAgent'] ) ) {
- $req->setUserAgent( $options['userAgent'] );
- }
$status = $req->execute();
if ( $status->isOK() ) {
@@ -136,7 +156,7 @@ class Http {
*
* file:// should not be allowed here for security purpose (r67684)
*
- * @fixme this is wildly inaccurate and fails to actually check most stuff
+ * @todo FIXME this is wildly inaccurate and fails to actually check most stuff
*
* @param $uri Mixed: URI to check for validity
* @return Boolean
@@ -192,7 +212,7 @@ class MWHttpRequest {
* @param $url String: url to use. If protocol-relative, will be expanded to an http:// URL
* @param $options Array: (optional) extra params to pass (see Http::request())
*/
- function __construct( $url, $options = array() ) {
+ protected function __construct( $url, $options = array() ) {
global $wgHTTPTimeout;
$this->url = wfExpandUrl( $url, PROTO_HTTP );
@@ -209,15 +229,27 @@ class MWHttpRequest {
} else {
$this->timeout = $wgHTTPTimeout;
}
+ if( isset( $options['userAgent'] ) ) {
+ $this->setUserAgent( $options['userAgent'] );
+ }
$members = array( "postData", "proxy", "noProxy", "sslVerifyHost", "caInfo",
"method", "followRedirects", "maxRedirects", "sslVerifyCert", "callback" );
foreach ( $members as $o ) {
if ( isset( $options[$o] ) ) {
+ // ensure that MWHttpRequest::method is always
+ // uppercased. Bug 36137
+ if ( $o == 'method' ) {
+ $options[$o] = strtoupper( $options[$o] );
+ }
$this->$o = $options[$o];
}
}
+
+ if ( $this->noProxy ) {
+ $this->proxy = ''; // noProxy takes precedence
+ }
}
/**
@@ -278,19 +310,18 @@ class MWHttpRequest {
}
/**
- * Take care of setting up the proxy
- * (override in subclass)
+ * Take care of setting up the proxy (do nothing if "noProxy" is set)
*
- * @return String
+ * @return void
*/
public function proxySetup() {
global $wgHTTPProxy;
- if ( $this->proxy ) {
+ if ( $this->proxy || !$this->noProxy ) {
return;
}
- if ( Http::isLocalURL( $this->url ) ) {
+ if ( Http::isLocalURL( $this->url ) || $this->noProxy ) {
$this->proxy = '';
} elseif ( $wgHTTPProxy ) {
$this->proxy = $wgHTTPProxy ;
@@ -376,6 +407,7 @@ class MWHttpRequest {
*
* @param $fh handle
* @param $content String
+ * @return int
*/
public function read( $fh, $content ) {
$this->content .= $content;
@@ -400,9 +432,7 @@ class MWHttpRequest {
$this->setReferer( wfExpandUrl( $wgTitle->getFullURL(), PROTO_CURRENT ) );
}
- if ( !$this->noProxy ) {
- $this->proxySetup();
- }
+ $this->proxySetup(); // set up any proxy as needed
if ( !$this->callback ) {
$this->setCallback( array( $this, 'read' ) );
@@ -417,8 +447,6 @@ class MWHttpRequest {
* Parses the headers, including the HTTP status code and any
* Set-Cookie headers. This function expectes the headers to be
* found in an array in the member variable headerList.
- *
- * @return nothing
*/
protected function parseHeader() {
$lastname = "";
@@ -446,8 +474,6 @@ class MWHttpRequest {
* RFC2616, section 10,
* http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for a
* list of status codes.)
- *
- * @return nothing
*/
protected function setStatus() {
if ( !$this->respHeaders ) {
@@ -801,11 +827,13 @@ class PhpHttpRequest extends MWHttpRequest {
if ( $this->method == 'POST' ) {
// Required for HTTP 1.0 POSTs
$this->reqHeaders['Content-Length'] = strlen( $this->postData );
- $this->reqHeaders['Content-type'] = "application/x-www-form-urlencoded";
+ if( !isset( $this->reqHeaders['Content-Type'] ) ) {
+ $this->reqHeaders['Content-Type'] = "application/x-www-form-urlencoded";
+ }
}
$options = array();
- if ( $this->proxy && !$this->noProxy ) {
+ if ( $this->proxy ) {
$options['proxy'] = $this->urlToTCP( $this->proxy );
$options['request_fulluri'] = true;
}
@@ -884,7 +912,7 @@ class PhpHttpRequest extends MWHttpRequest {
return $this->status;
}
- // If everything went OK, or we recieved some error code
+ // If everything went OK, or we received some error code
// get the response body content.
if ( $this->status->isOK()
|| (int)$this->respStatus >= 300) {