2014-01-08 5 views
10

내가 URL을 얻을 컬과 wget을 모두 사용하고 있습니다 : 컬를 들어 http://opinionator.blogs.nytimes.com/2012/01/19/118675/왜곡되지는 않지만 wget이 작동합니까?

, 그것은 전혀 출력을 반환하지만 wget과 함께, 그것은 전체 HTML 소스를 반환 : 여기

는이 명령됩니다. 나는 동일한 사용자 에이전트를 사용했으며, 둘 다 동일한 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" 

NY Times가 클로킹을하고 소스를 말릴 수없는 경우 컬이 다른 머리글을 보낼 수 있습니까? 나는 사용자 에이전트가 같기 때문에 요청은이 두 요청 모두에서 똑같이 보일 것이라고 가정했다. 다른 "발자국"을 확인해야합니까?

+0

이 하나가 도움이 될까요? http://stackoverflow.com/questions/8298727/curl-hanging-for-15-seconds-when-sending-head-requests –

+0

전혀 도움이 안된다. ( –

+0

curl 요청에'-v' 플래그를 추가하는 것이 좋습니다. wget 요청에 추가 된'-d' 플래그는 성공적인 wget 요청으로 어떤 일이 일어나는지 보여줍니다. 두 프로그램 모두 로그인 페이지로 리다이렉션되지만, 어떻게 든 wget이 성공적으로 대상 자원을 검색하지만 curl은 나쁜 리다이렉션을 얻고 포기할 때까지 지속적으로 리다이렉트된다. wget이 nytimes.com으로 쿠키를 보내고있는 것처럼 보일 것이다. curl은 쿠키를 보내지 않는다. –

답변

12

해결하는 방법은 컬이 (재 지정의 루프 다음에 로그인 페이지

> 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 

로 리디렉션되는 것을 보여줍니다 curl -v ...를 수행하여 curl 요청 및 wget -d ...을 수행하여 wget과 요구를 분석 할 수있는 당신을 --max-redirs 플래그를 이미 설정 했으므로주의해야합니다. 한편

wget는 그것의 후속 요청은

---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 

컬에 의해 전송 된 요청을 결코 쿠키를 포함하지 않는로 nytimes.com 의해 설정된 쿠키를 리턴하는 것을 제외하고는 동일한 시퀀스를 따른다.

curl 명령을 수정하고 원하는 리소스를 얻는 가장 쉬운 방법은 curl 명령에 -c cookiefile을 추가하는 것입니다. 이렇게하면 "cookiefile"이라는 임시 "쿠키 병"파일에 쿠키가 저장되므로 curl이 후속 요청과 함께 필요한 쿠키를 보낼 수 있습니다.

예를 들어, "curl"바로 뒤에 플래그 -c x을 추가하고 wget에서와 같은 출력을 얻었습니다 (wget이 파일에 쓰고 컬이 STDOUT에 인쇄한다는 점만 제외하고).

+0

- v는 대개 매우 유용합니다. –

관련 문제