Curl在跟随50次重定向后失败了,但wget正常工作。

9
我有一个试验性的网络爬虫,发现它无法读取一些网页,例如在某些特定域上,curl在跟随50次重定向后返回失败,但wget可以正常读取同一域名的内容: curl 'netflix.com' -L -o 'output.txt' 结果: curl: (47) Maximum (50) redirects followed output.txt文件中没有任何数据。
而这个命令可以正常工作: wget netflix.com 有什么理由可以解释这种情况吗?我怀疑远程服务器不会根据两个不同的用户代理处理请求。

听起来像是curl的限制(可能是设计上的)。 - Donovan
2
我猜是因为wget默认启用了cookies,但你没有告诉curl要使用cookies... - Daniel Stenberg
@DanielStenberg 就是这样,如果您能将其添加为答案,我会选择它。谢谢。 - adrianTNT
1
不错的猜测 @DanielStenberg。我更新了我的答案,希望你能回答并获得积分。 - vgoff
2个回答

11

可能是因为您没有告诉curl使用cookies,除非您要求它这样做,否则它不会使用它们 - 而wget默认启用cookies。

使用--cookie--cookie-jar选项启用cookies。


10

--max-redirs N是用于限制重定向次数的选项。默认值为50。

你在那里看到的“47”是达到重定向限制的错误代码。

wget的重定向限制默认为20,因此curl的重定向肯定有其他问题。

对于相同命令,我的系统运行良好,只有大约3-5个重定向。

您可以使用--verbose选项跟踪这些重定向,并将其与wget的默认输出进行比较。

默认情况下,wget启用Cookie,而curl不启用,正如@DanielStenberg所提醒的那样,希望他能回答并被接受。


谢谢,我后来尝试了--verbose并看到了一个有趣的名为“Entry Trap”的URL https://signup.netflix.com/entrytrap,这是一个cookie问题,一旦我告诉Curl使用cookies,它就正常工作了。 - adrianTNT
Daniel Stenberg的猜测非常准确,如果他不将其添加为答案,我会选择你的。--verbose确实有帮助。谢谢。 - adrianTNT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接