Добрый день! Мне потребовалось работать с API Adwords. В SOAPUI я запрос делаю и приходит нормальный ответ в XML Запрос: Код (Text): POST https://adwords.google.com/api/adwords/reportdownload/v201809 HTTP/1.1 Accept-Encoding: gzip,deflate Host: adwords.google.com User-Agent: curl, gzip Accept: / Accept-Encoding: gzip Authorization: Bearer ya29.Il4354535 developerToken: NBs222222222222 clientCustomerId: 467-008-0000 Expect: 100-continue Content-Type: application/x-www-form-urlencoded Content-Length: 240 Connection: Keep-Alive Ответ Код (Text): <reportDownloadError> <ApiError> <type>AuthenticationError.OAUTH_TOKEN_INVALID</type> <trigger><null></trigger> <fieldPath/> </ApiError> </reportDownloadError> Если пытаюсь реализовать, тоже самое с curl, то приходит Код (Text): �m�� �@�_E��-�[�"h$�vЮ���¶+�o��'"ԡ���034y?��7(kb���s�B��>l�����5� �0꠷3�2�r�;g�i�V©��Au�8�/NP�M}l�ꔗmQ^�s��pIStJJp���Qk_b4{�J� ��p� �;�;��&��� �m�� �@�_E��-�[�"h$�vЮ���¶+�o��'"ԡ���034y?��7(kb���s�B��>l�����5� �0꠷3�2�r�;g�i�V©��Au�8�/NP�M}l�ꔗmQ^�s��pIStJJp���Qk_b4{�J� ��p� �;�;��&��� Сам код Код (Text): <?php echo(" <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'> <html> <head> <title>Adwords </title> <link rel='stylesheet' type='text/css' href='../style.css'> <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>"); $url = 'https://adwords.google.com/api/adwords/reportdownload/v201809'; $headers = array( "Host: adwords.google.com", "User-Agent: curl, gzip", "Accept: /", "Accept-Encoding: gzip", "Authorization: Bearer ya29.Il4354535", "developerToken:NBs222222222222", "clientCustomerId:467-008-0000", "Expect: 100-continue", "Content-Length: 240", "Connection: Keep-Alive" ); $body = '__fmt=CSV&__rdquery=SELECT%20Date%2C%20CampaignId%2C%20AdGroupId%2C%20AdGroupName%2C%20Impressions%2C%20Clicks%2C%20Cost%20%20%20FROM%20ADGROUP_PERFORMANCE_REPORT%20%20%20WHERE%20AdGroupStatus%20IN%20%5BENABLED%2C%20PAUSED%5D%20DURING%20LAST_7_DAYS'; echo "<br>Отчет Adwords<br>"; $cookiePath = tempnam('/tmp', 'cookie'); //var_dump($body); // Инициализация cURL $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiePath); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLINFO_HEADER_OUT, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // --- Запуск цикла для выполнения запросов --- // Если получен HTTP-код 200, то выводится содержание отчета // Если получен HTTP-код 201 или 202, выполняются повторные запросы while (true) { $result = curl_exec($curl); $info = curl_getinfo($curl); if (!$result) { echo('Ошибка cURL: ' . curl_errno($curl) . ' - ' . curl_error($curl)); break; } else { echo "<br><br>"; // Разделение HTTP-заголовков и тела ответа $responseHeadersSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE); // var_dump($responseHeadersSize) ; echo "<br><br>"; $responseHeaders = substr($result, 0, $responseHeadersSize); $responseBody = substr($result, $responseHeadersSize); // Получение кода состояния HTTP $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); // Извлечение HTTP-заголовков ответа // Идентификатор запроса $requestId = preg_match('/RequestId: (\d+)/', $responseHeaders, $arr) ? $arr[1] : false; // Рекомендуемый интервал в секундах для проверки готовности отчета $retryIn = preg_match('/retryIn: (\d+)/', $responseHeaders, $arr) ? $arr[1] : 60; if ($httpCode == 400) { echo "Параметры запроса указаны неверно или достигнут лимит отчетов в очереди<br>"; echo "RequestId: {$requestId}<br>"; echo "JSON-код запроса:<br>{$body}<br>"; echo "JSON-код ответа сервера:<br>{$responseBody}<br>"; break; } elseif ($httpCode == 200) { echo "Отчет создан успешно<br>"; echo "RequestId: {$requestId}<br>"; echo $responseBody; break; } elseif ($httpCode == 201) { echo "Отчет успешно поставлен в очередь в режиме офлайн<br>"; echo "Повторная отправка запроса через {$retryIn} секунд<br>"; echo "RequestId: {$requestId}<br>"; sleep($retryIn); } elseif ($httpCode == 202) { echo "Отчет формируется в режиме offline.<br>"; echo "Повторная отправка запроса через {$retryIn} секунд<br>"; echo "RequestId: {$requestId}<br>"; sleep($retryIn); } elseif ($httpCode == 500) { echo "При формировании отчета произошла ошибка. Пожалуйста, попробуйте повторить запрос позднее<br>"; echo "RequestId: {$requestId}<br>"; echo "JSON-код ответа сервера:<br>{$responseBody}<br>"; break; } elseif ($httpCode == 502) { echo "Время формирования отчета превысило серверное ограничение.<br>"; echo "Пожалуйста, попробуйте изменить параметры запроса - уменьшить период и количество запрашиваемых данных.<br>"; echo "RequestId: {$requestId}<br>"; break; } else { echo "Произошла непредвиденная ошибка.<br>"; echo "RequestId: {$requestId}<br>"; // echo "JSON-код запроса:<br>{$body}<br>"; echo "ответа сервера:<br>{$responseBody}<br>"; break; } } } curl_close($curl); echo $responseBody; ?>