You are here

public function InstapageCmsPluginDrupal8Connector::remoteRequest in Instapage plugin 8.3

Same name and namespace in other branches
  1. 7.3 core/connectors/InstapageCmsPluginDrupal8Connector.php \InstapageCmsPluginDrupal8Connector::remoteRequest()

Performsremote request in a way specific for Drupal 7.

Parameters

string $url URL for the request.:

array $data Data that will be passed in the request.:

array $headers Headers for the request.:

string $method Method of the request. 'POST' or 'GET'.:

Return value

array Request result in a form of associative array.

2 calls to InstapageCmsPluginDrupal8Connector::remoteRequest()
InstapageCmsPluginDrupal8Connector::remoteGet in core/connectors/InstapageCmsPluginDrupal8Connector.php
Performs remote GET request.
InstapageCmsPluginDrupal8Connector::remotePost in core/connectors/InstapageCmsPluginDrupal8Connector.php
Performs remote POST request.

File

core/connectors/InstapageCmsPluginDrupal8Connector.php, line 243

Class

InstapageCmsPluginDrupal8Connector
Class that utilizes native Drupal 8 functions to perform actions like remote requests and DB operations.

Code

public function remoteRequest($url, $data, $headers = array(), $method = 'POST') {
  try {
    if ($method == 'POST' && (!is_array($data) || !count($data))) {
      $data = array(
        'ping' => true,
      );
      InstapageCmsPluginHelper::writeDiagnostics($data, 'Request (' . $method . ') data empty. Ping added.');
    }
    $formParams = $data;
    if ($method == 'GET' && is_array($data)) {
      $dataString = http_build_query($data, '', '&');
      $url .= '?' . urldecode($dataString);
      $formParams = array();
    }
    $cookies = isset($data['cookies']) ? $data['cookies'] : array();
    $cookieJar = false;
    if (!empty($cookies)) {
      $domain = parse_url($url, PHP_URL_HOST);
      $cookieJar = \GuzzleHttp\Cookie\CookieJar::fromArray($cookies, $domain);
    }
    $client = \Drupal::httpClient();
    $request = $client
      ->request($method, $url, array(
      'allow_redirects' => array(
        'max' => 5,
      ),
      'connect_timeout' => 45,
      'synchronous' => true,
      'cookies' => $cookieJar,
      'version' => '1.0',
      'form_params' => $formParams,
      'headers' => $headers,
    ));
    if ($request
      ->getStatusCode() === 200) {
      return $this
        ->prepareResponse($request);
    }
    else {
      return [
        'body' => json_encode([
          'status' => 'ERROR',
          'message' => InstapageCmsPluginConnector::lang('Request failed with status %s.', $request
            ->getStatusCode()),
        ]),
      ];
    }
  } catch (Exception $e) {
    return [
      'body' => json_encode([
        'status' => 'ERROR',
        'message' => InstapageCmsPluginConnector::lang('Request failed. ') . $e
          ->getMessage(),
      ]),
    ];
  }
}