@dr_mamaev

Url адрес в get запросе в python 3.6 обрезается, почему?

Есть простой гет запрос
import requests
def send_message (peer_id,message='',attachment='',forward_messages='',token=""):
    r=requests.get('https://api.vk.com/method/messages.send',params={'peer_id':peer_id,'message':message,'attachment':attachment,'forward_messages':forward_messages,'v':'5.71','access_token':token})
    print((r.content).decode('utf-8'))

При попытке перейти на очень длинный адрес, примерно свыше 2500 символов, возникают проблемы
send_message (2000000723,'t'*4000)
В результате, вместо нормального ответа API получаю это:
<html>
<head><title>414 Request-URI Too Long</title></head>
<body bgcolor="white">
<center><h1>414 Request-URI Too Long</h1></center>
<hr><center>nginx/0.3.33</center>
</body>
</html>

Я пробовал то же самое через библиотеку "VK", всё нормально отсылается, в браузере хром ссылка открывается и возвращается ответ сервера, с "requests" что? Как исправить это недоразумение
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
Отправлять данные через POST, а не GET. Обычно GET запрос лимитируется до 64k, но зависит от настроек веб-сервера.
import requests
def send_message (peer_id,message='',attachment='',forward_messages='',token=""):
    r=requests.post('https://api.vk.com/method/messages.send', data ={'peer_id':peer_id,'message':message,'attachment':attachment,'forward_messages':forward_messages,'v':'5.71','access_token':token})
    print((r.content).decode('utf-8'))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sgaynetdinov
Вам стоит обратить внимание на библиотеку py-vkontakte, которая позволяет работать с API vk.com.

$ pip install py-vkontakte

>>> import vk
>>> api = vk.Api(TOKEN)
>>> group = api.get_group('team')  # vk.com/team
>>> group.send_messages(user_id, message='Hello')


Пример, бота для ВК (https://github.com/sgaynetdinov/instasave_bot/)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы