Domanda

Sono un principiante di Python, provando ad usare pyCurl. Il progetto a cui sto lavorando è la creazione di un wrapper Python per l'API twitpic.com ( http://twitpic.com/ api.do ). A scopo di riferimento, controlla il codice ( http://pastebin.com/f4c498b6e ) e l'errore I ' m getting ( http://pastebin.com/mff11d31 ).

Presta particolare attenzione alla riga 27 del codice, che contiene " xml = server.perform () " ;. Dopo aver studiato il mio problema, ho scoperto che, diversamente da come avevo pensato in precedenza, .perform () non restituisce la risposta XML da twitpic.com, ma None, quando il caricamento ha esito positivo (duh!).

Dopo aver esaminato ulteriormente l'output dell'errore, mi sembra l'input xml che voglio inserire nel "quot" xml " la variabile viene invece stampata sull'etere standard o sull'errore standard (non sono sicuro di quale). Sono sicuro che esiste un modo semplice per farlo, ma al momento non riesco a pensarci. Se hai qualche consiglio che potrebbe indirizzarmi nella giusta direzione, sarei molto grato. Grazie in anticipo.

È stato utile?

Soluzione

Il documento pycurl dice esplicitamente:

  

perform () - > Nessuno

Quindi il risultato atteso è quello che osservi.

guardando un esempio dal sito pycurl:

import sys
import pycurl

class Test:
   def __init__(self):
       self.contents = ''

   def body_callback(self, buf):
       self.contents = self.contents + buf

print >>sys.stderr, 'Testing', pycurl.version

t = Test()
c = pycurl.Curl()
c.setopt(c.URL, 'http://curl.haxx.se/dev/')
c.setopt(c.WRITEFUNCTION, t.body_callback)
c.perform()
c.close()

print t.contents

L'interfaccia richiede un'istanza di classe - Test () - con un callback specifico per salvare il contenuto. Nota la chiamata c.setopt (c.WRITEFUNCTION, t.body_callback) - qualcosa del genere manca nel tuo codice, quindi non ricevi alcun dato ( buf nel esempio). L'esempio mostra come accedere al contenuto:

print t.contents

Altri suggerimenti

L'uso di StringIO sarebbe molto più pulito, inutile utilizzare una classe fittizia come quella se tutto ciò che desideri sono i dati di risposta ...

Qualcosa del genere sarebbe sufficiente:

import pycurl
import cStringIO

response = cStringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.turnkeylinux.org')
c.setopt(c.WRITEFUNCTION, response.write)
c.perform()
c.close()

print response.getvalue()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top