Длинный url (get-запрос) в file_get_contents

583
08 января 2017, 20:03

Здравствуйте. Работаю с 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. Как можно по-другому отправить запрос с таким длинным сообщением?

Answer 1

Отправляйте запросы с помощью 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.

READ ALSO
Call to undefined function import_request_variables()

Call to undefined function import_request_variables()

Сервер с PHP 53 перешел на PHP 5

565
Получение количества участников групп VK API

Получение количества участников групп VK API

Доброго времени суток господаНужна ваша помощь в легкой задаче, увы, для меня из за нехватки опыта это оказалось сложным

674
Не могу исправить ошибку в Symfony

Не могу исправить ошибку в Symfony

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)

356