Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[DEBUTANT] problème pour un POST

5 réponses
Avatar
dante
Bonjour, je fais des challenges sur le net, et là je suis au niveau 11
de http://www.try2hack.nl/

je me suis pour la peine mis au python (avec le bouquin téléchargeable
ici : http://www.cifen.ulg.ac.be/inforef/swi/python.htm ) langage qui me
faisait de l'oeil depuis un certain temps, ça m'a permis d'aller lui
dire bonjour à ce joli petit langage, enfin bref.

Donc le niveau 11 ici :
http://www.try2hack.nl/levels/level11-vmituh.php

Il faut multiplier les valeurs des caractères aux positions données de
la chaîne générée aléatoirement et renvoyer la réponse en moins de 5
secondes.

J'ai réussi à récupérer la page, faire les calculs nécessaires, mais
lors de l'envoi, je crois que je fait une erreur car rien de nouveau ne
s'affiche.

Est-ce que je me trompe dans le POST ?

merci

voici mon code, désolé si ce n'est pas très propre, mais c'est mon
premier en python, je débute comme déjà dit plus haut.
Code :

#!/usr/bin/python
# -*- coding: utf-8 -*-
import httplib
import urllib
import re

conn = None
conn = httplib.HTTPConnection('try2hack.nl')
conn.request('GET', "/levels/level11-vmituh.php")

# connexion serveur et lecture
reponse = conn.getresponse()
page= reponse.read()

#je récupère les positions
debut = re.search('at positions ', page).end()
fin = re.search(' of your', page).start()
contenu = page[debut:fin]

ch = page[debut:fin]
ch = ch.replace(", ","*")
ch = ch.replace(" and ","*")
#print ch
ch = ch.split("*")
#print ch

# je recupere la chaine
debut = re.search('string:<br>', page).end()
fin = re.search('<hr><br><br>', page).start()
contenu = page[debut:fin]
#print contenu

resultat = 1
i = 0
#je fais la multiplication ASCII le +1 est pour la position, car dans
l'énoncé on commence à 1 et non 0

while i < len(ch):
resultat *= ord(contenu[int(ch[i])+1])
i += 1
print resultat

#il y a un problème quand le 5 chiffre en partant de la fin est un 0 et
ceux.
# exemple si j'ai 04000 ou 00400 ou 00040 ou 00004 j'aurai
respectivement 4000, 400, 40, 4 J'aimerai avoir toujours 5 chiffres.
Comment le fait on en python je n'ai pas trouvé ma réponse.

resultat = resultat % (resultat / 100000)
print resultat

#j'utilise urlencode avec un dictionnaire
formulaire = urllib.urlencode({"answer":resultat})
#et j'envoie ma réponse et je lis le retour, seulement ça affiche comme
si j'avais fait une erreur, ou que j'ai mal envoyé... je ne sais pas.

print urllib.urlopen("http://www.try2hack.nl/levels/level11-vmituh.php",
formulaire).read()


merci de votre aide

Ah j'ai oublié de dire, parfois j'ai cette eurreur lors du calcul :

File "try2hack.py", line 47, in ?
resultat *= ord(contenu[int(ch[i])+1])
IndexError: string index out of range


cela veut dire que le resultat est trop important pour le type ? il faut
que je le mette en float ?

5 réponses

Avatar
Jerome
dante wrote:
Bonjour, je fais des challenges sur le net, et là je suis au niveau 11
de http://www.try2hack.nl/


Bonjour

*snip*


resultat = 1
i = 0
#je fais la multiplication ASCII le +1 est pour la position, car dans
l'énoncé on commence à 1 et non 0

while i < len(ch):
resultat *= ord(contenu[int(ch[i])+1])
i += 1
print resultat



Si les indices commencent à 1 il faut faire ch[i]-1 et non ch[i]+1

*snip*

Ah j'ai oublié de dire, parfois j'ai cette eurreur lors du calcul :

File "try2hack.py", line 47, in ?
resultat *= ord(contenu[int(ch[i])+1])
IndexError: string index out of range


cela veut dire que le resultat est trop important pour le type ? il faut
que je le mette en float ?


Cela veut dire que tu as un problème d'indice

Avatar
dante
Si les indices commencent à 1 il faut faire ch[i]-1 et non ch[i]+1


Mais que je suis un boulet boulay boulez, mais que je suis un boulet
boulay boulez...

bien évidment !

Merci de m'avoir ouvert les yeux.

Finalement ce n'était pas mon code pour le POST qui ne fonctionnait pas,
mais boulayhattitude.

Avatar
dante
Bonjour, mon problème étant réglé, je veux néanmoins savoir (faute
d'avoir trouvé dans la doc pour l'instant) s'il y avait une fonction
pour résoudre le problème suivant :


#il y a un problème quand le 5 chiffre en partant de la fin est un 0 et
ceux.
# exemple si j'ai 04000 ou 00400 ou 00040 ou 00004 j'aurai
respectivement 4000, 400, 40, 4 J'aimerai avoir toujours 5 chiffres.
Comment le fait on en python je n'ai pas trouvé ma réponse.

resultat = resultat % (resultat / 100000)
print resultat


merci

Avatar
Bruno Desthuilliers
dante wrote:
Bonjour, mon problème étant réglé, je veux néanmoins savoir (faute
d'avoir trouvé dans la doc pour l'instant) s'il y avait une fonction
pour résoudre le problème suivant :


#il y a un problème quand le 5 chiffre en partant de la fin est un 0
et ceux.
# exemple si j'ai 04000 ou 00400 ou 00040 ou 00004 j'aurai
respectivement 4000, 400, 40, 4 J'aimerai avoir toujours 5 chiffres.
Comment le fait on en python je n'ai pas trouvé ma réponse.



Tu a bien sûr recherché "string formatting" sur python.org ?



--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
dante
Bonjour, mon problème étant réglé, je veux néanmoins savoir (faute
d'avoir trouvé dans la doc pour l'instant) s'il y avait une fonction
pour résoudre le problème suivant :


#il y a un problème quand le 5 chiffre en partant de la fin est un 0
et ceux.
# exemple si j'ai 04000 ou 00400 ou 00040 ou 00004 j'aurai
respectivement 4000, 400, 40, 4 J'aimerai avoir toujours 5 chiffres.
Comment le fait on en python je n'ai pas trouvé ma réponse.

resultat = resultat % (resultat / 100000)
print resultat


merci


C'est bon j'ai trouvé.