2016-05-23 16 views
2

をSETOPTする無効な引数私は添付ファイルとしてファイルをPOSTリクエストを送信するためにPyCurlを使用しています:PyCurlはTypeError:

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() 

をし、私が手:

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 

間違っているのですか?

答えて

0

pycurl.POSTFIELDSには、URLエンコードされたデータが必要です。 From docs

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

あなたはpycurl.POSTFIELDSを使用してファイルを送信することはできません。

pycurl.HTTPPOSTを使用してファイルを送信できます。 From docs

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

私は、この例からPOSTFIELDS属性を得た:http://paste.org.ru/?70oc9c – paus

+0

@pausこの例は、PHP、Pythonのではない上に書かれています。 Curl APIはこの言語では異なります。 PHP固有の '@ $ filename'を' pycurl'と一緒に使うことはできません。 –