Обычно в парах ключ-значение, переданных в командной строке, вы сначала делят на =
, а не на второй. Итак, сделайте следующее:
r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'})
Например, в документации GNU для Program Argument Syntax Conventions:
Длинные опции состоят из «-» следует имя из буквенно-цифровых символов и тире. Названия опций обычно от одного до трех слов, с дефисами для разделения слов. Пользователи могут сокращать имена опций, пока аббревиатуры уникальны.
Чтобы указать аргумент для длинной опции, напишите '--name = value'. Этот синтаксис позволяет длинной опции принимать аргумент, который сам по себе необязателен.
Другими словами, в --foo=bar=baz
, foo
является name
и bar=baz
является value
, потому что =
не алфавитно-цифровой символ или тире.
Аналогично, curl
обрабатывает опцию -d foo=bar=baz
с foo
как name
и bar=baz
в качестве значения.
Вы не можете прямо сделать вывод, что из любой спецификации, вы даже не можете прямо заключить, что curl
следует за синтаксисом аргументов GNU вообще, поскольку он не является программой GNU, и (IIRC) выполняет собственный собственный аргумент разбор. Итак, вам нужно будет прочитать the source, чтобы быть абсолютно уверенным.
Или, проще говоря, протестируйте его. Захватите запрошенный формой запрос, который отправляет curl
. (Если вы не знаете, как сделать это:. Попробуйте выполнить поддельный сервер с netcat
, например, nc -kl 8888
в системе/BSD Mac, а затем curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
, и посмотреть, что появляется в командной строке)
Но такое поведение в значительной степени является неявным стандартом, когда у вас есть пары name=value
.