Python curl截断查询字符串的一部分?

Python curl截断查询字符串的一部分?,python,curl,scrapy,Python,Curl,Scrapy,所以我试图通过Scrapyd在EC2实例上运行大约几百个spider。我有很多这样的URL: https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=25233&siteid=5296 但当我通过卷曲运行蜘蛛时 curl http://localhost:6800/schedule.json -d project=MYPROJECT -d spider=SOMESPIDER -d spider_specific_o

所以我试图通过Scrapyd在EC2实例上运行大约几百个spider。我有很多这样的URL:

https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=25233&siteid=5296
但当我通过卷曲运行蜘蛛时

curl http://localhost:6800/schedule.json -d project=MYPROJECT -d spider=SOMESPIDER -d spider_specific_option=1 -d url="https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=25233&siteid=5296"
…并检查我的爬行器上的开始URL列表,我传入的URL似乎缺少&siteid值,如下所示:

https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=2523
经过数小时的研究,我发现curl停止了对“&”字符的处理,并认为您正试图将此过程推到后台,我观察到了这一点,最终结果是我丢失了查询字符串的一部分


我已经设法解决了这个问题,用一个%26替换了&in-all-my-URL,但是为什么curl在URL已经在引号中的时候会这样解释它呢?我以为引号是为了防止这样的问题发生?

我查看了文档,发现
-d
选项确实将
&
解释为分隔符,因此您不能在那里使用它,需要正确地将其删除。在python中,可以使用
urllib.parse.quote()
执行此操作,结果如下所示:

https%3A//items.initrode.com/TGWebHost/searchitems.aspx%3Fpartnerid%3D25233%26siteid%3D5296
然后运行curl,如下所示:

curl 'http://localhost:6800/schedule.json' \
    -d project=MYPROJECT \
    -d spider=SOMESPIDER \
    -d spider_specific_option=1 \
    -d "url=https%3A//items.initrode.com/TGWebHost/searchitems.aspx%3Fpartnerid%3D25233%26siteid%3D5296"

所以问题不在我最初建议的shell引用中,也不是严格意义上的
curl
解释参数的方式,而是在服务器端解释查询字符串的方式,
&
需要被解释为分隔符。

我对上面的帖子做了一些编辑,但是我错过了命令行url。你的意思是我需要用单引号而不是双引号括起来?