【问题标题】:How do I use PyCurl to send POST parameters?如何使用 PyCurl 发送 POST 参数?
【发布时间】:2019-10-25 02:18:52
【问题描述】:

我使用的是 Python 3.7。我正在尝试使用 PyCurl 发出 CURL POST 请求,但我无法弄清楚如何组装表单参数。我试过这个

conn = pycurl.Curl()
if python3:
    conn.setopt(conn.CAINFO, certifi.where())
conn.setopt(conn.URL, str(SEARCH_URL))
send = [("MAX_FILE_SIZE", 10485760),
        ('url', image_url),
        ('search', 'search'),
        ('nsfwfilter', 'on'),]
conn.setopt(pycurl.HTTPPOST, send)
conn.setopt(conn.FOLLOWLOCATION, 1)
conn.setopt(conn.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0')
conn.setopt(conn.WRITEFUNCTION, returned_code.write)
conn.perform()
conn.close()

这会因错误而死

  File "/Users/davea/Documents/workspace/myproject_project/myproject/services/media_service.py", line 71, in doImageSearch
    conn.setopt(pycurl.HTTPPOST, send)
TypeError: unsupported second type in tuple

如何正确格式化参数?

【问题讨论】:

  • send = [("MAX_FILE_SIZE", "10485760"), ... 呢?
  • 是的,就是这样。

标签: python python-3.x post pycurl


【解决方案1】:

我根据错误消息和预感发表了我的评论(我认为 MAX_FILE_SIZE 是请求的 HTTP 标头之一),也没有对其进行测试,但显然我是对的。我试图寻找官方文件来支持我的陈述,但我没有太多运气。
我搜索了[PycURL]: Curl Object setopt(option, value) → None,发现了这个:

可以通过直接使用选项常量的数值来设置 PycURL 不知道的整数选项——而且只有它们。例如pycurl.VERBOSE的值为42,可以设置如下:

c.setopt(42, 1)

,但这不是我所期待的。然后,更进一步:[Haxx.curl]: CURLOPT_HTTPPOST explained,但它也不包含太多有用的信息。
唯一与远程相关的地方是邮件线程:[Haxx.curl]: Difficulty uploading files via http

无论如何,让 MAX_FILE_SIZE 的“参数”成为一个字符串,成功了:

send = [
    ("MAX_FILE_SIZE", "10485760"),  # Notice the quotes
    ("url", image_url),
    ("search", "search"),
    ("nsfwfilter", "on"),
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2012-08-21
    相关资源
    最近更新 更多