基于请求模块将curl执行的post请求转换为python请求

基于请求模块将curl执行的post请求转换为python请求,python,post,curl,python-requests,Python,Post,Curl,Python Requests,当我运行spider时,我必须向scrapy发送扩展设置。我使用curl时非常简单: http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 但是,当我想根据模块请求将其插入python脚本时,我对设置=DOWNLOAD\u DELAY=2有点困惑,因为它没有遵循通常的形式(key=value)。 所以我试了一下

当我运行spider时,我必须向scrapy发送扩展设置。我使用curl时非常简单:

 http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
但是,当我想根据模块请求将其插入python脚本时,我对设置=DOWNLOAD\u DELAY=2有点困惑,因为它没有遵循通常的形式(key=value)。 所以我试了一下:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting=DOWNLOAD_DELAY': '2'})
但对通常的刮痧行为没有影响


提前感谢。

通常,在命令行上传递的键值对中,您在第一个
=
上拆分,而不是第二个。因此,请这样做:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'})
例如,在GNU文档中:

长选项由“--”和由字母数字字符和破折号组成的名称组成。选项名称通常有一到三个单词长,用连字符分隔单词。只要缩写是唯一的,用户就可以缩写选项名称

要为长选项指定参数,请编写'--name=value'。此语法允许long选项接受本身是可选的参数

换句话说,在
--foo=bar=baz
中,
foo
名称
bar=baz
,因为
=
不是字母数字字符或破折号

类似地,
curl
处理选项
-d foo=bar=baz
,其中
foo
作为
名称
,而
bar=baz
作为值

你不能直接从任何规范中推断,事实上,你甚至不能直接推断
curl
遵循GNU参数语法,因为它不是GNU程序,并且(IIRC)做自己的自定义参数解析。所以,你必须阅读才能绝对确定

或者,更简单地说,测试它。捕获
curl
发出的表单编码请求。(如果你不知道怎么做:试着用
netcat
运行一个假的服务器,例如在Mac/BSD系统上运行
nc-kl888
,然后
curl。)http://localhost:8888/schedule.json -d project=myproject-d spider=somespider-d setting=DOWNLOAD\u DELAY=2-d arg1=val1
,然后查看命令行上显示的内容。)

但只要有
name=value
对,这种行为几乎就是一种隐含的标准