public function MailchimpCurlHttpClient::handleRequest in Mailchimp 8
@inheritdoc
Overrides MailchimpHttpClientInterface::handleRequest
File
- lib/
mailchimp-api-php/ src/ http/ MailchimpCurlHttpClient.php, line 28
Class
- MailchimpCurlHttpClient
- An HTTP client for use with the Mailchimp API using cURL.
Namespace
Mailchimp\httpCode
public function handleRequest($method, $uri = '', $options = [], $parameters = [], $returnAssoc = FALSE) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, $this->config['timeout']);
// Set request headers.
$headers = [];
foreach ($options['headers'] as $header_name => $header_value) {
$headers[] = $header_name . ': ' . $header_value;
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Set request content.
switch ($method) {
case 'POST':
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode((object) $parameters));
break;
case 'GET':
$uri .= '?' . http_build_query($parameters);
break;
case 'PUT':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode((object) $parameters));
break;
case 'PATCH':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode((object) $parameters));
break;
case 'DELETE':
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
break;
default:
// Throw exception for unsupported request method.
throw new \Exception('Unsupported HTTP request method: ' . $method);
}
curl_setopt($ch, CURLOPT_URL, $uri);
// Get response as a string.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
$http_code = 0;
$error = NULL;
// Check for cURL error before checking HTTP response code.
if (curl_errno($ch)) {
$error = curl_error($ch);
}
else {
// Check the HTTP response code.
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code != 200) {
$response_data = json_decode($response);
$error = $response_data->detail;
}
}
// Close cURL connection.
curl_close($ch);
if (!empty($error)) {
throw new \Exception($error, $http_code);
}
return json_decode($response, $returnAssoc);
}