Как использовать PyCurl для отправки параметров POST? - PullRequest
0 голосов
/ 10 июня 2019

Я использую Python 3.7.Я пытаюсь сделать запрос CURL POST, используя PyCurl, но у меня возникают проблемы с выяснением, как собрать параметры формы.Я пробовал это

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

Как правильно отформатировать параметр?

1 Ответ

0 голосов
/ 11 июня 2019

Я разместил свой комментарий на основе сообщения об ошибке и догадки (я представлял, что MAX_FILE_SIZE - это один из HTTP-заголовков запроса ), но также не проверял его, новидимо я был прав.Я пытался найти официальную документацию в поддержку моего заявления, но мне не повезло.
Я искал [PycURL]: объект Curl setopt (опция , значение ) → Нет , где я нашел это:

Можно установить целочисленные параметры - и только их - о которых PycURL не знает, напрямую используя числовое значение константы параметра.Например, pycurl.VERBOSE имеет значение 42 и может быть установлено следующим образом:

c.setopt(42, 1)

, но это не то, что я ожидаю.Затем, продолжая: [Haxx.curl]: CURLOPT_HTTPPOST объяснил , но он также не содержит много полезной информации.
Единственное место, которое было бы удаленно связано, - это почтовая ветка: [Haxx.curl]: трудности с загрузкой файлов через http .

В любом случае, MAX_FILE_SIZE 'аргумент' строки, сделал трюк:

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