diff options
Diffstat (limited to 'includes/libs/MultiHttpClient.php')
-rw-r--r-- | includes/libs/MultiHttpClient.php | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/includes/libs/MultiHttpClient.php b/includes/libs/MultiHttpClient.php index 8c982c43..fb2daa69 100644 --- a/includes/libs/MultiHttpClient.php +++ b/includes/libs/MultiHttpClient.php @@ -34,6 +34,7 @@ * array bodies are encoded as multipart/form-data and strings * use application/x-www-form-urlencoded (headers sent automatically) * - stream : resource to stream the HTTP response body to + * - proxy : HTTP proxy to use * Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'. * * @author Aaron Schulz @@ -52,13 +53,17 @@ class MultiHttpClient { protected $usePipelining = false; /** @var integer */ protected $maxConnsPerHost = 50; + /** @var string|null proxy */ + protected $proxy; /** * @param array $options * - connTimeout : default connection timeout * - reqTimeout : default request timeout + * - proxy : HTTP proxy to use * - usePipelining : whether to use HTTP pipelining if possible (for all hosts) * - maxConnsPerHost : maximum number of concurrent connections (per host) + * @throws Exception */ public function __construct( array $options ) { if ( isset( $options['caBundlePath'] ) ) { @@ -67,7 +72,7 @@ class MultiHttpClient { throw new Exception( "Cannot find CA bundle: " . $this->caBundlePath ); } } - static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost' ); + static $opts = array( 'connTimeout', 'reqTimeout', 'usePipelining', 'maxConnsPerHost', 'proxy' ); foreach ( $opts as $key ) { if ( isset( $options[$key] ) ) { $this->$key = $options[$key]; @@ -83,7 +88,7 @@ class MultiHttpClient { * - reason : HTTP response reason (empty if there was a serious cURL error) * - headers : <header name/value associative array> * - body : HTTP response body or resource (if "stream" was set) - * - err : Any cURL error string + * - error : Any cURL error string * The map also stores integer-indexed copies of these values. This lets callers do: * <code> * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req ); @@ -103,14 +108,14 @@ class MultiHttpClient { * Execute a set of HTTP(S) requests concurrently * * The maps are returned by this method with the 'response' field set to a map of: - * - code : HTTP response code or 0 if there was a serious cURL error - * - reason : HTTP response reason (empty if there was a serious cURL error) - * - headers : <header name/value associative array> - * - body : HTTP response body or resource (if "stream" was set) - * - err : Any cURL error string - * The map also stores integer-indexed copies of these values. This lets callers do: - * <code> - * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response']; + * - code : HTTP response code or 0 if there was a serious cURL error + * - reason : HTTP response reason (empty if there was a serious cURL error) + * - headers : <header name/value associative array> + * - body : HTTP response body or resource (if "stream" was set) + * - error : Any cURL error string + * The map also stores integer-indexed copies of these values. This lets callers do: + * <code> + * list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response']; * </code> * All headers in the 'headers' field are normalized to use lower case names. * This is true for the request headers and the response headers. Integer-indexed @@ -123,6 +128,7 @@ class MultiHttpClient { * - usePipelining : whether to use HTTP pipelining if possible * - maxConnsPerHost : maximum number of concurrent connections (per host) * @return array $reqs With response array populated for each + * @throws Exception */ public function runMulti( array $reqs, array $opts = array() ) { $chm = $this->getCurlMulti(); @@ -244,12 +250,14 @@ class MultiHttpClient { * - connTimeout : default connection timeout * - reqTimeout : default request timeout * @return resource + * @throws Exception */ protected function getCurlHandle( array &$req, array $opts = array() ) { $ch = curl_init(); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, isset( $opts['connTimeout'] ) ? $opts['connTimeout'] : $this->connTimeout ); + curl_setopt( $ch, CURLOPT_PROXY, isset( $req['proxy'] ) ? $req['proxy'] : $this->proxy ); curl_setopt( $ch, CURLOPT_TIMEOUT, isset( $opts['reqTimeout'] ) ? $opts['reqTimeout'] : $this->reqTimeout ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 ); |