gpt4 book ai didi

python - curl 截断查询字符串的部分?

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:48 25 4
gpt4 key购买 nike

所以我试图通过 Scrapyd 让大约数百个蜘蛛在 EC2 实例上运行。我有很多像这样的网址:

https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=25233&siteid=5296

但是当我通过 CURL 运行蜘蛛时...

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"

...并检查我的蜘蛛上的 start_urls 列表,我传入的 URL 似乎缺少 &siteid 值,如下所示:

https://items.initrode.com/TGWebHost/searchitems.aspx?partnerid=2523

经过几个小时的研究,我发现curl在“&”字符处停止处理,并认为你试图将这个过程推到后台,我观察到它确实如此,最终结果是我缺少查询字符串的一部分。

我已经设法通过用 %26 替换所有 URL 中的 & 来解决这个问题,但是为什么当 URL 已经在引号中时,curl 会这样解释它呢?我认为引号应该可以防止类似问题的发生?

最佳答案

我查看了文档,在 -d 选项的情况下 curl 确实将 & 解释为分隔符,因此您可以'不要在那里使用它,需要正确地排除它。在 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 解释参数的方式,而更多地在于服务器端解释查询字符串的方式其中 & 需要被解释为分隔符。

关于python - curl 截断查询字符串的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26011719/

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