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

问题描述:

当我运行蜘蛛时,我必须向scrapy发送扩展设置。这真的很容易,当我使用卷曲:将curl执行的请求转换为基于请求的python请求模块

http://localhost:6800/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1 

但是,当我想基于模块的请求在Python脚本堵塞这个,我有点困惑设置= DOWNLOAD_DELAY = 2,因为它不遵循通常的形式(key = value)。 所以,我想这一点:

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting=DOWNLOAD_DELAY': '2'}) 

,但对平常scrapy的行为没有影响。

在此先感谢。

通常情况下,在通过命令行传递的键值对中,您将分割第一个第一个=,而不是第二个。对于Program Argument Syntax Conventions

r = requests.post("http://httpbin.org/get", params={'arg1': 'val1', 'setting': 'DOWNLOAD_DELAY=2'}) 

例如,GNU文档中:那么,这样做

长选项包括“ - ”,然后由字母数字字符和连字符的名称。选项名称通常是一到三个字长,用连字符分隔单词。只要缩写是唯一的,用户可以缩写选项名称。

要指定长选项的参数,请写'--name = value'。此语法使长选项能够接受本身是可选的参数。

换句话说,在--foo=bar=bazfooname,和bar=bazvalue,因为=不是一个字母数字字符或破折号。

类似地,curl处理选项-d foo=bar=bazfoo作为namebar=baz作为值。

不能直接推断,从任何规范,事实上,你甚至不能直接推断curl遵循GNU参数语法可言,因为它不是一个GNU程序和(IIRC)做它自己的自定义参数解析。所以,你必须仔细阅读the source

或者更简单地说,测试它。捕获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对。