Ответ 1
Способ решения состоит в том, чтобы проанализировать ваш запрос curl
, выполнив curl -v ...
и ваш запрос wget, выполнив wget -d ...
, который показывает, что завиток перенаправляется на страницу входа
> 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
следует той же последовательности, за исключением того, что он возвращает cookie, установленный nytimes.com, с последующим запросом (-ами)
---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 в неиспользуемом временном файле "cookie jar", называемом "cookiefile", тем самым позволяя завитка отправлять необходимые файлы cookie с последующими запросами.
Например, я добавил флаг -c x
непосредственно после "curl", и я получил результат так же, как из wget (кроме того, что wget записывает его в файл, а curl выводит его на STDOUT).