我正在使用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
如何正确格式化参数?
答案 0 :(得分:0)
我根据错误消息和预感发表了评论(我想 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"),
]