HTTP afficher les fichiers binaires à l'aide de Python: concis non-pycurl exemples?

Je suis intéressé par l'écriture d'un court script python qui télécharge un court fichier binaire (.wav/.raw audio) via une requête POST vers un serveur distant.

Je l'ai fait avec pycurl, ce qui le rend très simple et les résultats dans une brève script; malheureusement, il faut aussi que la fin
l'utilisateur ont pycurl installé, je ne peux pas compter sur.

J'ai aussi vu quelques exemples dans d'autres posts qui s'appuient uniquement sur les bibliothèques de base, urllib, urllib2, etc., cependant, en général, semblent être assez détaillées, ce qui est aussi quelque chose que j'aimerais éviter.

Je me demande s'il y a des exemples concis qui ne nécessitent pas l'utilisation de bibliothèques externes, et qui sera rapide et facile pour la 3ème parties à comprendre, même si elles ne sont pas particulièrement familier avec python.

Ce que j'utilise à l'heure actuelle ressemble,


def upload_wav( wavfile, url=None, **kwargs ):
    """Upload a wav file to the server, return the response."""

    class responseCallback:
        """Store the server response."""
        def __init__(self):
            self.contents=''
        def body_callback(self, buf):
            self.contents = self.contents + buf

        def decode( self ):
            self.contents = urllib.unquote(self.contents)
            try:
                self.contents = simplejson.loads(self.contents)
            except:
                return self.contents

    t = responseCallback()
    c = pycurl.Curl()
    c.setopt(c.POST,1)
    c.setopt(c.WRITEFUNCTION, t.body_callback)
    c.setopt(c.URL,url)
    postdict = [
        ('userfile',(c.FORM_FILE,wavfile)),  #wav file to post                                                                                 
        ]
    #If there are extra keyword args add them to the postdict                                                                                  
    for key in kwargs:
        postdict.append( (key,kwargs[key]) )
    c.setopt(c.HTTPPOST,postdict)
    c.setopt(c.VERBOSE,verbose)
    c.perform()
    c.close()
    t.decode()
    return t.contents

ce n'est pas exact, mais il vous donne l'idée générale. Il fonctionne très bien, il est simple pour la 3ème parties à comprendre, mais il exige pycurl.

OriginalL'auteur si28719e | 2009-08-12