Requests::request_multiple() WordPress Method

The Requests::request_multiple() method is a powerful tool for making multiple HTTP requests in parallel. This can be very useful when you need to fetch data from multiple sources, or when you want to make multiple requests to the same server. This method takes an array of request objects as its first parameter, and an optional array of options as its second parameter. The options array can be used to specify a callback function that will be called when all the requests have completed. The Requests::request_multiple() method is a great way to improve the performance of your WordPress site. When used correctly, it can significantly reduce the amount of time it takes to load pages.

Requests::request_multiple( array $requests, array $options = array() ) #

Send multiple HTTP requests simultaneously


Description

The $requests parameter takes an associative or indexed array of request fields. The key of each request can be used to match up the request with the returned data, or with the request passed into your multiple.request.complete callback.

The request fields value is an associative array with the following keys:

  • url: Request URL Same as the $url parameter to Requests::request (string, required)
  • headers: Associative array of header fields. Same as the $headers parameter to Requests::request (array, default: array())
  • data: Associative array of data fields or a string. Same as the $data parameter to Requests::request (array|string, default: array())
  • type: HTTP request type (use Requests constants). Same as the $type parameter to Requests::request (string, default: Requests::GET)
  • cookies: Associative array of cookie name to value, or cookie jar. (array|Requests_Cookie_Jar)

If the $options parameter is specified, individual requests will inherit options from it. This can be used to use a single hooking system, or set all the types to Requests::POST, for example.

In addition, the $options parameter takes the following global options:

  • complete: A callback for when a request is complete. Takes two parameters, a Requests_Response/Requests_Exception reference, and the ID from the request array (Note: this can also be overridden on a per-request basis, although that’s a little silly) (callback)

Top ↑

Parameters

$requests

(array)(Required)Requests data (see description for more information)

$options

(array)(Optional)Global and default options (see Requests::request)

Default value: array()


Top ↑

Return

(array) Responses (either Requests_Response or a Requests_Exception object)


Top ↑

Source

File: wp-includes/class-requests.php

429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
public static function request_multiple($requests, $options = array()) {
    $options = array_merge(self::get_default_options(true), $options);
 
    if (!empty($options['hooks'])) {
        $options['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
        if (!empty($options['complete'])) {
            $options['hooks']->register('multiple.request.complete', $options['complete']);
        }
    }
 
    foreach ($requests as $id => &$request) {
        if (!isset($request['headers'])) {
            $request['headers'] = array();
        }
        if (!isset($request['data'])) {
            $request['data'] = array();
        }
        if (!isset($request['type'])) {
            $request['type'] = self::GET;
        }
        if (!isset($request['options'])) {
            $request['options']         = $options;
            $request['options']['type'] = $request['type'];
        }
        else {
            if (empty($request['options']['type'])) {
                $request['options']['type'] = $request['type'];
            }
            $request['options'] = array_merge($options, $request['options']);
        }
 
        self::set_defaults($request['url'], $request['headers'], $request['data'], $request['type'], $request['options']);
 
        // Ensure we only hook in once
        if ($request['options']['hooks'] !== $options['hooks']) {
            $request['options']['hooks']->register('transport.internal.parse_response', array('Requests', 'parse_multiple'));
            if (!empty($request['options']['complete'])) {
                $request['options']['hooks']->register('multiple.request.complete', $request['options']['complete']);
            }
        }
    }
    unset($request);
 
    if (!empty($options['transport'])) {
        $transport = $options['transport'];
 
        if (is_string($options['transport'])) {
            $transport = new $transport();
        }
    }
    else {
        $transport = self::get_transport();
    }
    $responses = $transport->request_multiple($requests, $options);
 
    foreach ($responses as $id => &$response) {
        // If our hook got messed with somehow, ensure we end up with the
        // correct response
        if (is_string($response)) {
            $request = $requests[$id];
            self::parse_multiple($response, $request);
            $request['options']['hooks']->dispatch('multiple.request.complete', array(&$response, $id));
        }
    }
 
    return $responses;
}

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by the Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.