PyCurl类型错误:setopt的参数无效。

3

我正在使用PyCurl发送带有文件附件的POST请求:

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

有什么问题吗?

1个回答

0

pycurl.POSTFIELDS需要URL编码的数据。来自文档

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

你不能使用 pycurl.POSTFIELDS 发送文件。

可以使用 pycurl.HTTPPOST 发送文件。来自文档

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

@paus 这个例子是用 PHP 写的,不是 Python。这两种语言的 Curl API 是不同的。你不能在 pycurl 中使用 PHP 特定的 @$filename - Mikhail Gerasimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接