В процессе работы с VK API столкнулся с ошибкой "
Failure when receiving data from the peer", когда получаю положительный ответ на загрузку изображений и истории, прикрепление опросов, но при этом обнаружил, что в некоторых случаях ёмкие посты с большим текстом просто не появляются на стене. Путём тестирования и отлавливания ошибки удалось выяснить почему это происходит и как это исправить.
Изначально обращение к VK API методу wall.post было с помощью file_get_contents, где составлялась строка URL для отправки запроса с параметрами (http_build_query()) которые содержали текст публикации. Метод в целом рабочий, но скажем так "кривоват", потому что у HTTP запроса такого типа есть лимит на длину, из-за чего пост не публиковался, а file_get_contents отдавал в ответе NULL.
Помню, что file_get_contents в целом не очень надёжен, так и в этой ситуации это в очередной раз подтверждается, что даже выловить ошибку с него не получится. На этом я решил перевести запрос на CURL, сделал тест и получил ответ "Failure when receiving data from the peer". На этом стало понятно, что проблема в URL, так как при тестах отправки малого текста — всё публиковалось, а с большим текстом нет. Логично, что в ёмких публикациях упирался в лимиты, поэтому убрал параметры из URL, передавая их в тело запроса CURLOPT_POSTFIELDS. После этого изменения ошибка пропала, а посты надёжно уходят на стену!
На всякий случай также прикрепляю пример кода:
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_USERAGENT => 'VK API AG-Marketing Client',
CURLOPT_POSTFIELDS => http_build_query($params)
CURLOPT_HTTPGET => true
]);
$response = curl_exec($ch);
Данная заметка может оказаться многим полезной и сэкономить время.