通常,在命令行上传递的键值对中,您拆分第一个 =
,而不是第二个。所以,这样做:
r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'})
例如,在Program Argument Syntax Conventions的 GNU 文档中:
长选项由 '--' 后跟由字母数字字符和破折号组成的名称组成。选项名称通常为一到三个单词,并用连字符分隔单词。只要缩写是唯一的,用户就可以缩写选项名称。
要为长选项指定参数,请编写“--name=value”。此语法允许长选项接受本身是可选的参数。
换句话说, in --foo=bar=baz
,foo
是name
,bar=baz
是value
, 因为=
不是字母数字字符或破折号。
同样,将curl
选项作为-d foo=bar=baz
和作为值处理。foo
name
bar=baz
您不能从任何规范中直接推断出这一点——事实上,您甚至根本无法直接推断出curl
遵循 GNU 参数语法,因为它不是 GNU 程序,并且 (IIRC) 进行自己的自定义参数解析。因此,您必须阅读源代码才能确定。
或者,更简单地说,测试它。curl
捕获发出的表单编码请求。(如果您不知道如何操作:尝试仅使用 运行假服务器netcat
,例如nc -kl 8888
在 Mac/BSD 系统上,然后curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
查看命令行上显示的内容。)
name=value
但是,只要你有对,这种行为几乎就是一个隐含的标准。