2016-05-23 9 views
2

ich pycurl bin mit POST-Anfrage mit Datei als Anhang senden:pycurl Typeerror: ungültiges Argument setopt

d = pycurl.Curl() 
d.setopt(pycurl.URL, url) 
# d.setopt(pycurl.RETURNTRANSFER, True) 
d.setopt(pycurl.POST, True) 
d.setopt(pycurl.POSTFIELDS, {filename: "@" + filename}) 
b = StringIO.StringIO() 
d.setopt(pycurl.WRITEFUNCTION, b.write) 
d.perform() 
d.close() 
message = b.getvalue() 

und ich bekomme:

Something went wrong, invalid arguments to setopt 
Traceback (most recent call last): 
    File "hasoff.py", line 214, in create_offers_for_advertiser 
    if filename: 
TypeError: invalid arguments to setopt 

Was ist los?

Antwort

0

pycurl.POSTFIELDS benötigt URL-codierte Daten. From docs:

post_data = {'field': 'value'} 
postfields = urlencode(post_data) 
c.setopt(c.POSTFIELDS, postfields) 

Sie können nicht Datei pycurl.POSTFIELDS mit senden.

Datei kann mit pycurl.HTTPPOST gesendet werden. From docs:

c.setopt(c.HTTPPOST, [ 
    ('fileupload', (
     c.FORM_FILE, __file__, 
     c.FORM_FILENAME, 'helloworld.py', 
     c.FORM_CONTENTTYPE, 'application/x-python', 
    )), 
]) 
+0

ich aus diesem Beispiel POSTFIELDS Attribut bekam: http://paste.org.ru/?70oc9c – paus

+0

@paus dieses Beispiel auf PHP geschrieben ist, nicht Python. Curl API ist für diese Sprachen unterschiedlich. Sie können den PHP-spezifischen '@ $ filename' nicht mit' pycurl' verwenden. –

Verwandte Themen