Bienvenue sur IndexError.

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

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

Comment poster sur zerobin en python ?

+5 votes
import mechanize

br = mechanize.Browser()
br.open('http://127.0.0.1:8000')
br['content'] = "ooooooooo"
response2 = br.submit()
print response2.get_data()

le "post" n'apparait pas dans l'interface graphique.
Ubuntu 14.04,
zerobin issus de github.
Installe facile
Python 2.7

demandé 24-Jun-2015 par Hackolite (292 points)
edité 24-Jun-2015 par Hackolite

Rajoute les logs de ton erreur pour qu'on puisse savoir quel type c'est.

Pour zerobin je ne sais pas, pour 0bin j'ai un poc qui traine sur gitub (ca fait un post direct, ca n'utilise pas mecanize): https://gist.github.com/jcsaaddupuy/4d925ba1cdeb8aa57783

Si zerobin utilise aussi SJCL çà peut donner des pistes.

J'ai ça qui vient apres installdes paquets et lancement de ton script. Pourtant j'utilise le dépot qur tu indiques.

Exception: Pycrypto does not seem to support MODE_CCM. You need a version >= 2.7a1 (or a special branch).

effectivement, il y a une branch ccm
un petit git checkout ccm avant le python setup.py build devrait régler l'affaire.

Cette solution reste un truc pas très propre hein ;)

toujours la meme ereur, je suis uptodate pour ccm.

ok.
J'ai aussi eu des problemes aussi avec la version de pycrypto référencée dans le gist (chez moi ca ne compilait juste pas).

Par contre compiler la lib depuis le dépôt original fonctionne.
(pense bien a faire un pip uninstall pycrypto avant de réinstaller la lib depuis les sources)

J'ai pu poster ce bin http://0bin.net/paste/sGJjhQit4Y0ALMlV#indexerror sans modifier le gist.

Ce qui est dommage, c'est que la version de pycrypto dispo sur pypi est la 2.6.1, pas la 2.7a1 dispo sur github.

EDIT : le lien vers ma réponse correspondant a ce commentaire.

3 Réponses

+4 votes
 
Meilleure réponse

il y a Selenium qui permet d'executer du JS avec PhantomJS pour avoir une version headless .
Tu peux bidouiller quelque chose en simulant un navigateur web JS compatible avec Selenium et automatiser les posts.

from selenium import webdriver
import time

#driver = webdriver.Firefox()
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get("http://0bin.net/")
driver.find_element_by_id('content').send_keys("a poil les putes!")
driver.find_element_by_id("submit_form").click()

while driver.current_url.find('paste') == -1:
    print "Processing...Please wait..."
    time.sleep(1)

print driver.current_url
driver.quit()

On peut voir le travail sous Firefox si on le sélectionne comme driver et il soumet bien le formulaire et affiche l'url de retour.
Le timer est là pour attendre la fin de la redirection.

[johndoe@Cortex ~/work/tests] python test.py
Processing...Please wait...
Processing...Please wait...
http://0bin.net/paste/GHCqXkJg6Jhlu1cq#aH8qt1t9hteP45mKNexY6-LcC118RxFPcxgSoay5oR9
répondu 26-Jun-2015 par max (894 points)
edité 26-Jun-2015 par max

L'idéal, ce serait une belle API sur 0bin :)

C'est bien les trucs sales aussi :)

Je sais pas de quand date le topic mais merci pour ce code crade, bien utile et marche impec !

Il y a un ticket ouvert pour ça mais c'est beaucoup plus de boulot qu'on le pense car il faut créer une lib Python qui chiffre le paste avant de l'envoyer en utilisant la même méthode que le JS.

+3 votes

Actuellement ce n'est pas possible, car il faut envoyer la version chiffrer et on a jamais pris le temps de créer l'algo de chiffrement en Python. Si quelqu'un se sent chaud pour un PR :)

répondu 26-Jun-2015 par Sam (5,000 points)

A Ok. c'est dommage parce que le chiffrement j'en avais pas spécialement besoin. Donc une version sans chiffrement, et un plugin chiffrement python permetrait de scripter .... je regarde ça.

+2 votes

Je reposte mon commentaire comme réponse pour lui donner plus de visibilité, çà pourra peut-être servir a quelqu'un.

Il faut
- pycrypto installé depuis https://github.com/dlitz/pycrypto (actuellement la version 2.6.1 dispo sur pypi n'est pas compatible, il faut au minimum la 2.7a1)
- le module SJCL : pip install sjcl

from collections import OrderedDict
from sjcl import SJCL
import requests
import json
import base64

host="http://0bin.net"
key="AKEY"
text="hello world"
cyphertext = SJCL().encrypt(base64.b64encode(text), key)

# ordered dict because 0bin expect iv to be the first item.
data=OrderedDict()
data["iv"]=cyphertext["iv"]
data["salt"]=cyphertext["salt"]
data["ct"]=cyphertext["ct"]

r=requests.post("%s/%s" % (host, "paste/create"), data={"content": json.dumps(data)})

print "%s/paste/%s#%s" % (host, r.json()["paste"], key)
répondu 26-Jun-2015 par jc (2,704 points)
...