我正在使用curl和wget来获取此URL: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"
如果"纽约时报"可能会伪装,并且没有将源代码恢复到卷曲状态,那么标题卷曲中可能会有什么不同呢?我假设因为用户代理是相同的,所以请求应该看起来完全相同.我应该检查其他什么"脚印"?
解决方法是curl
通过执行curl -v ...
和wget请求分析您的请求,wget -d ...
这表明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命令并获得所需资源的最简单方法是添加-c cookiefile
到curl命令.这将cookie存储在另外未使用的名为"cookiefile"的临时"cookie jar"文件中,从而使curl能够发送所需的cookie及其后续请求.
例如,我-c x
在"curl"之后直接添加了标志,我从wget获得了输出(除了wget将其写入文件并且curl将其打印在STDOUT上).