2010-06-19 4 views
1

BASH 내부에서 프로그램 cURL을 사용하여 웹 페이지의 소스 코드를 다운로드하려고했습니다. 페이지가 단순 HTML보다 복잡한 인코딩을 사용할 때 페이지의 코드를 다운로드 할 때 어려움을 겪고 있습니다. 예를 들어, 나는 다음과 같은 명령을 사용하여 다음 페이지의 소스 코드를 볼하려고 :cURL - 웹 사이트 소스 검색

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" 

그러나 파이어 폭스에 의해 생성 된 소스 코드와 일치하지 않는이 결과 나는 "소스보기"를 클릭합니다. 나는 그것이 페이지에 자바 스크립트 요소가 있기 때문에 그것이라고 믿는다. 그러나 나는 확신 할 수 없다.

예를 들어, 나는 할 수 없습니다

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" | grep "Access to 4G speeds" 

그 구절은 분명히 파이어 폭스 소스에서 발견된다하더라도. 맨 페이지를 살펴 보았지만 가능한 해결책을 찾기 위해 문제에 대해 충분히 알지 못합니다.

좋은 대답은 이것이 내가 기대하는 방식으로 작동하지 않는 이유와 컬 또는 Linux 상자에서 실행 가능한 다른 도구를 사용하여 문제에 대한 해결책을 포함합니다.

편집 : 나는 또한없는 성공을 가진 사용자 에이전트 스위치를 포함했다 아래 제안시

:

curl "http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones" -A "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3" | grep -i "Sorry" 

답변

4

내가 처음에 일은 "4G 속도에 대한 액세스"를 참조하지 않습니다를 때 그 페이지로 가라.

이 두 가지 가장 큰 원인은 쿠키와 사용자 에이전트입니다.

curl 또는 wget을 사용하여 쿠키를 수동으로 지정할 수 있습니다. 당신이 원하는 플러그인을 사용하여 파이어 폭스에서 쿠키를 덤프하거나

javascript:prompt('',document.cookie); 

위치 표시 줄 에서 그 다음 wget을하거나 컬에 대한 매뉴얼 페이지를 읽어 스틱 그 쿠키를 포함하는 방법을 참조하십시오.


편집 : 은 내가, 누락 된 쿠키를 생각했던 것으로 보인다. 위에서 언급 한 바와 같이

curl --cookie "INSERT THE COOKIE YOU GOT HERE" http://shop.sprint.com/NASApp/onlinestore/en/Action/DisplayPhones?INTNAV=ATG:HE:Phones | grep "Access to 4G" 

, 당신은 위로부터 당신이 무엇을 쿠키 잡아 수 있습니다 javascript:prompt('',document.cookie) 다음 나오면 기본 텍스트를 복사합니다. 당신은 위치 표시 줄에 (그렇지 않으면 잘못된 웹 사이트의 쿠키하게 될 겁니다) 것을 충실 할 때 스프린트 페이지에


편집 2

이유 브라우저 쿠키있어 확인 쉘 쿠키가 다른 점은 상호 작용이 다른 점입니다.

내가 처음에 얘기했던 4G 속도에 대한 액세스를 보지 못한 이유는 내가 우편 번호를 입력하지 않았기 때문입니다.

지속적으로 관련성 높은 쿠키를 만들고 싶다면 curl이 해당 쿠키를 얻기 위해 필요한 모든 것을 수행하도록 할 수 있습니다.이 경우에는 우편 번호를 입력하십시오.

컬에서 여러 요청이 작업을 수행하고 쿠키 항아리에서 검색된 쿠키를 보유 할 수 있습니다

[stackoverflow] curl --help | grep cookie 
-b/--cookie <name=string/file> Cookie string or file to read cookies from (H) 
-c/--cookie-jar <file> Write cookies to this file after operation (H) 
-j/--junk-session-cookies Ignore session cookies read from file (H) 

그래서 간단히 떨어져 작업의 우편 번호를 보내도록 요청을 보내, 쿠키 항아리를 지정합니다.

+0

마우스 오른쪽 - 더보기 \t HTC EVO ™ 4G * * 듀얼 모드 3G/4G 장치, 신뢰할 수있는 3G – Ryan

+0

감사에 액세스 3G보다 최대 10 배 더 빨리 4G 속도에 액세스하십시오 톤!! 내 마지막 질문은이 쿠키가 일정 기간 동안이 스크립트를 실행할 수있을 정도로 오래 지속되는지 여부입니다. 아니면이 쿠키를 다시 다운로드해야합니까? – Ryan

0

동일한 소스에서 다른 소스 코드를 얻는다면 서버가 사용자 에이전트를 스니핑하고 특정 코드를 배치하는 것이 가장 좋습니다.

JavaScript는 DOM에서 작동하고 모든 종류의 작업을 수행 할 수 있지만 '소스보기'를 사용하면 브라우저가 DOM 조작 이전에 처음 읽은 코드와 정확히 동일합니다. 에보 아래