Python curl截断查询字符串的一部分?
所以我试图通过Scrapyd在EC2实例上运行大约几百个spider。我有很多这样的URL: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
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。你的意思是我需要用单引号而不是双引号括起来?