gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:24 26 4
gpt4 key购买 nike

当我运行蜘蛛时,我必须向 scrapy 发送一个扩展设置。当我使用 curl 时,这真的非常容易:

 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 行为没有影响。

提前致谢。

最佳答案

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

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

例如,在 GNU 文档中 Program Argument Syntax Conventions :

Long options consist of ‘--’ followed by a name made of alphanumeric characters and dashes. Option names are typically one to three words long, with hyphens to separate words. Users can abbreviate the option names as long as the abbreviations are unique.

To specify an argument for a long option, write ‘--name=value’. This syntax enables a long option to accept an argument that is itself optional.

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

类似地,curl 处理选项 -d foo=bar=baz 并将 foo 作为 name 并且bar=baz 作为值。

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

或者,更简单地说,测试它。捕获 curl 发出的表单编码请求。 (如果您不知道该怎么做:尝试使用 netcat 运行假服务器,例如,在 Mac/BSD 系统上运行 nc -kl 8888,然后 curl http://localhost:8888/schedule.json -d project=myproject -d spider=somespider -d setting=DOWNLOAD_DELAY=2 -d arg1=val1,看看命令行上显示了什么.)

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

关于python - 基于requests模块将curl执行的post请求转换为python请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com