我正在使用curl和wget来获取此网址:http://opinionator.blogs.nytimes.com/2012/01/19/118675/
对于curl,它根本不返回任何输出,但是使用wget,它返回整个HTML源:
以下是2个命令。我使用了相同的用户代理,两者都来自同一个IP,并且正在跟踪重定向。 URL完全相同。对于卷曲,它会在1秒后立即返回,所以我知道这不是超时问题。
curl -L -s "http://opinionator.blogs.nytimes.com/2012/01/19/118675/" --max-redirs 10000 --location --connect-timeout 20 -m 20 -A "Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" 2>&1
wget http://opinionator.blogs.nytimes.com/2012/01/19/118675/ --user-agent="Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
如果“纽约时报”可能会伪装,并且没有将源码恢复到卷曲状态,那么标题卷曲中可能会有什么不同?我假设因为用户代理是相同的,所以请求应该看起来完全相同。我应该检查哪些“足迹”?
答案 0 :(得分:13)
解决方法是通过执行curl
来分析您的curl -v ...
请求,并通过执行wget -d ...
来分析您的wget请求,这表明curl已重定向到登录页面
> GET /2012/01/19/118675/ HTTP/1.1
> User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
> Host: opinionator.blogs.nytimes.com
> Accept: */*
>
< HTTP/1.1 303 See Other
< Date: Wed, 08 Jan 2014 03:23:06 GMT
* Server Apache is not blacklisted
< Server: Apache
< Location: http://www.nytimes.com/glogin?URI=http://opinionator.blogs.nytimes.com/2012/01/19/118675/&OQ=_rQ3D0&OP=1b5c69eQ2FCinbCQ5DzLCaaaCvLgqCPhKP
< Content-Length: 0
< Content-Type: text/plain; charset=UTF-8
后面是一个重定向循环(你必须注意到,因为你已经设置了--max-redirs标志)。
另一方面,wget
遵循相同的顺序,除了它返回由nytimes.com设置的cookie及其后续请求
---request begin---
GET /2012/01/19/118675/?_r=0 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Accept: */*
Host: opinionator.blogs.nytimes.com
Connection: Keep-Alive
Cookie: NYT-S=0MhLY3awSMyxXDXrmvxADeHDiNOMaMEZFGdeFz9JchiAIUFL2BEX5FWcV.Ynx4rkFI
curl发送的请求从不包含cookie。
我看到修改curl命令并获取所需资源的最简单方法是在curl命令中添加-c cookiefile
。这将cookie存储在名为“cookiefile”的其他未使用的临时“cookie jar”文件中,从而使curl能够发送所需的cookie及其后续请求。
例如,我在“curl”之后直接添加了标志-c x
,我从wget获得了输出(除了wget将其写入文件并且curl将其打印在STDOUT上)。