Здравствуйте. Работаю с vk API, отправляю сообщения обыкновенным методом messages.send
, при помощи такого кода:
file_get_contents("http://api.vk.com/method/messages.send?message=".urlencode($message)."&v=5.60&peer_id=$pid&access_token=$token");`
Всё работает отлично, если я отправляю короткие сообщения (максимальная длина сообщения, которое мне удалось передать - ~850 знаков). Учитывая ещё то, что после urlencode()
каждая русская буква = 3 символа, длина url получается довольно немаленькой. Но когда я отправляю сообщения большей длины, php возвращает warning: file_get_contents ...
. Я попробовал отправить запрос через mozilla, но не получилось даже в ней (пишет что-то вроде не удалось установить соединение). Если попробовать отправить такой длинный текст с сайта вк - всё нормально, вк позволяет передавать сообщения такой длины.
Следовательно, проблема в длинном url. Как можно по-другому отправить запрос с таким длинным сообщением?
Отправляйте запросы с помощью cURL методом POST примерно таким образом:
$parameters = [
'access_token' => $token,
'v' => '5.60',
'peer_id' => $pid,
'message' => $message
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.vk.com/method/messages.send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// в этой переменной JSON-объект, который вернет ВК
$curl_result = curl_exec($ch);
curl_close($ch);
сейчас попробовал curl, но там ведь тоже в CURLOPT_URL я передаю длинный url. В ответ приходит пустая строка
Это потому, что вы пихаете данные так же в GET-параметры, а надо в тело POST-запроса через параметр CURLOPT_POSTFIELDS
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток господаНужна ваша помощь в легкой задаче, увы, для меня из за нехватки опыта это оказалось сложным
CRITICAL - Fatal Error: Class AppBundle\Entity\User contains 2 abstract methods and must therefore be declared abstract or implement the remaining methods (Symfony\Component\Security\Core\User\UserInterface::getRoles, Symfony\Component\Security\Core\User\UserInterface::eraseCredentials)