Chris@17: TRUE, Chris@17: ]; Chris@17: $retries = 0; Chris@17: while ($retries < 10) { Chris@17: try { Chris@17: $customHeaders = [ Chris@17: 'Content-Type: application/json;charset=UTF-8', Chris@17: 'Accept: application/json;charset=UTF-8', Chris@17: ]; Chris@17: Chris@17: $curl = curl_init($url); Chris@17: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); Chris@17: Chris@17: switch ($requestMethod) { Chris@17: case 'GET': Chris@17: break; Chris@17: Chris@17: case 'POST': Chris@17: if ($parameters && is_array($parameters)) { Chris@17: curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters)); Chris@17: } Chris@17: else { Chris@17: $customHeaders[] = 'Content-Length: 0'; Chris@17: } Chris@17: Chris@17: // Suppress "Expect: 100-continue" header automatically added by Chris@17: // cURL that causes a 1 second delay if the remote server does not Chris@17: // support Expect. Chris@17: $customHeaders[] = 'Expect:'; Chris@17: Chris@17: curl_setopt($curl, CURLOPT_POST, TRUE); Chris@17: break; Chris@17: Chris@17: case 'DELETE': Chris@17: curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); Chris@17: break; Chris@17: Chris@17: case 'PUT': Chris@17: if ($parameters && is_array($parameters)) { Chris@17: curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters)); Chris@17: } Chris@17: else { Chris@17: $customHeaders[] = 'Content-Length: 0'; Chris@17: } Chris@17: Chris@17: // Suppress "Expect: 100-continue" header automatically added by Chris@17: // cURL that causes a 1 second delay if the remote server does not Chris@17: // support Expect. Chris@17: $customHeaders[] = 'Expect:'; Chris@17: Chris@17: curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); Chris@17: break; Chris@17: } Chris@17: Chris@17: foreach ($extraOptions as $option => $value) { Chris@17: curl_setopt($curl, $option, $value); Chris@17: } Chris@17: Chris@17: curl_setopt($curl, CURLOPT_HTTPHEADER, $customHeaders); Chris@17: Chris@17: $rawResult = trim(curl_exec($curl)); Chris@17: Chris@17: $info = curl_getinfo($curl); Chris@17: $info['request_method'] = $requestMethod; Chris@17: Chris@17: if (array_key_exists(CURLOPT_FAILONERROR, $extraOptions) && $extraOptions[CURLOPT_FAILONERROR] && CURLE_GOT_NOTHING !== ($errno = curl_errno($curl)) && $error = curl_error($curl)) { Chris@17: curl_close($curl); Chris@17: Chris@17: throw WebDriverException::factory(WebDriverException::CURL_EXEC, sprintf("Curl error thrown for http %s to %s%s\n\n%s", $requestMethod, $url, $parameters && is_array($parameters) ? ' with params: ' . json_encode($parameters) : '', $error)); Chris@17: } Chris@17: Chris@17: curl_close($curl); Chris@17: Chris@17: $result = json_decode($rawResult, TRUE); Chris@17: if (isset($result['status']) && $result['status'] === WebDriverException::STALE_ELEMENT_REFERENCE) { Chris@17: usleep(100000); Chris@17: $retries++; Chris@17: continue; Chris@17: } Chris@17: return [$rawResult, $info]; Chris@17: } Chris@17: catch (CurlExec $exception) { Chris@17: $retries++; Chris@17: } Chris@17: } Chris@17: throw WebDriverException::factory(WebDriverException::CURL_EXEC, sprintf("Curl error thrown for http %s to %s%s\n\n%s", $requestMethod, $url, $parameters && is_array($parameters) ? ' with params: ' . json_encode($parameters) : '', $error)); Chris@17: } Chris@17: Chris@17: }