Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Erreur 400 - Urllib2 - Python 2.7

+1 vote

Je travaille sur un bot Telegram, et pour ce faire je dois effectuer des requêtes web avec urllib. Pendant plusieurs jours, aucun soucis, mais soudainement le bout de code suivant me plante une erreur 400. Voici les détails:

resp = urllib2.urlopen(BASE_URL + 'sendMessage', urllib.urlencode({
                'chat_id': str(chat_id),
                'text': msg.encode('utf-8'),
                'parse_mode': "Markdown"
                })).read()

avec chatid = 19434374, BASEURL une URL télégram et msg =

Bienvenue à toi Acxxx Acxxx alias @Acxxx ! Tu es sur le chat xxxxx Si tu as besoin d'aide sur Telegram : http://resfr.eu/tutotg Un /help pour apprendre a me dompter, et $tldr pour bien commencer ;) Bon chat #NouveauMembre !

dans le cas qui fait planter. J'obtiens l'erreur suivante :

File "/base/data/home/apps/s~/1.393139067506922444/main.py", line 330, in post say(u"Bienvenue à toi "+fnln + u" alias @" +newpartuser+u" !\nTu es sur le chat "+groupen+u"\nSi tu as besoin d'aide sur Telegram : http://resfr.eu/tutotg\nUn /help pour apprendre a me dompter, et $tldr pour bien commencer ;)\n\nBon chat #NouveauMembre !")
File "/base/data/home/apps/s~/1.393139067506922444/main.py", line 119, in say 'parse
mode': "Markdown"
File "/base/data/home/runtimes/python27/python27dist/lib/python2.7/urllib2.py", line 127, in urlopen return _opener.open(url, data, timeout)
File "/base/data/home/runtimes/python27/python27
dist/lib/python2.7/urllib2.py", line 410, in open response = meth(req, response)
File "/base/data/home/runtimes/python27/python27dist/lib/python2.7/urllib2.py", line 523, in httpresponse 'http', request, response, code, msg, hdrs)
File "/base/data/home/runtimes/python27/python27dist/lib/python2.7/urllib2.py", line 448, in error return self.callchain(*args)
File "/base/data/home/runtimes/python27/python27
dist/lib/python2.7/urllib2.py", line 382, in callchain result = func(*args)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 531, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

demandé 29-Mai-2016 par fayak (292 points)

Je dirais que ton souci se trouve dans l'URL. L'API Telegram n'a pas changé depuis octobre 2014 d'après ce que je trouve ici. Est-ce que tu pourrais faire un print/return de l'URL?

@c0da Voici le résultat d'un print de l'url encode avant de l'ouvrir :

('https://api.telegram.org/xxx/sendMessage',
'text=Bienvenue+%C3%A0+toi+Acxxx+Acxxx+alias+%40Acxxx+%21+Tu+es+sur+le+chat+xxxxx+Si+tu+as+besoin+d%27aide+sur+Telegram+%3A+http%3A%2F%2Fresfr.eu%2Ftutotg+Un+%2Fhelp+pour+apprendre+a+me+dompter%2C+et+%24tldr+pour+bien+commencer+%3B%29+Bon+chat+%23NouveauMembre+%21&parsemode=Markdown&chatid=19434374&disablewebpagepreview=true&replytomessageid=248')

Si tu testes l'URL dans un client fonctionel est-ce que ca fontionne? Je viens de voir que j'ai linké le mauvais Changelog dans mon précédent commentaire: en fait l'API a pas mal changé ces derniers temps.

2 Réponses

–1 vote

Utilise requests pour les requêtes http:
* il propose l'authentification oauth
* il est de plus haut niveau

répondu 10-Jun-2016 par frague (484 points)

Tu ne proposes pas vraiment une solution a la question posée. L'avantage d'urllib c'est que c'est dans la stdlib et que pour un simple wrapper d'API c'est largement suffisant.

+1 vote

L'API a juste changé, et il faut que tu regardes la doc pour voir les nouveaux paramètres.

Ca peut être un paramètre en plus qu'il faut, ou alors l'authentification qui demande un token different.

Un truc courrant aussi c'es la synchronisation du temps, et il faut alors que ton serveur ait l'heure réglée correctement.

répondu 23-Jun-2016 par Sam (4,974 points)
...