다른 페이지에서 로그인이 필요한 페이지에 액세스하기위한 CURL


125

두 페이지가 있습니다 : xyz.com/axyz.com/b. 처음 xyz.com/b로그인 해야만 액세스 할 수 있습니다 xyz.com/a. 액세스하는 경우 xyz.com/b다른 거치지 않고, 나는 단순히 브라우저를 통해 액세스가 거부 (로그인없이 리디렉션)을 얻는다. 에 로그인 xyz.com/a하면 다른 계정에 액세스 할 수 있습니다.

내 문제는 curl 명령을 사용하여 수행하는 것입니다. xyz.com/acurl 을 사용하여 성공적으로 로그인 할 수 있지만 시도 xyx.com/b하면 액세스가 거부됩니다.

다음을 사용합니다.

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

사용자 / 암호 부분이없는 &없이 두 번째 줄을 사용해 보았지만 여전히 작동하지 않습니다. 두 페이지 모두 동일한 CA를 사용하므로 문제가되지 않습니다. 어떤 제안? 감사

답변:


147

웹 사이트는 쿠키 를 사용하여 세션 정보를 저장합니다. 당신이 달릴 때

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curl두 개의 개별 세션에서 두 번 실행됩니다. 따라서 두 번째 명령이 실행되면 첫 번째 명령에서 설정 한 쿠키를 사용할 수 없습니다. 마치 a한 브라우저 세션에서 페이지 에 로그인하고 다른 세션의 페이지 b에 액세스하려고 시도한 것과 같습니다.

해야 할 일은 첫 번째 명령으로 생성 된 쿠키를 저장 하는 것입니다 .

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

두 번째를 실행할 때 다시 읽어보십시오.

curl --cookie ./somefile https://xyz.com/b

또는 동일한 쿠키를 사용하는 동일한 명령으로 두 파일을 모두 다운로드 할 수 있습니다.


이것은 내가 이것을 시도 할 때 저장된 쿠키에 somefile경로 매개 변수 ( /a이 경우) 가 포함되어 작동하지 않고 두 번째 호출로 전달되지 않기 때문에 이상합니다. 파일에서 쿠키를 편집하고 슬래시 만 넣으면 작동합니다 (쿠키가 두 번째 호출로 전달됨). 쿠키 파일에 경로 저장을 방지 할 수 있는지 알고 있습니까?
рüффп

124

또한 브라우저를 통해 로그인하고 쿠키를 포함한 모든 헤더로 명령을받을 수 있습니다.

개발자 도구의 네트워크 탭을 열고 로그인 한 다음 필요한 페이지로 이동하여 "cURL로 복사"를 사용하십시오.

스크린 샷


12
이것은 깊은 대답입니다! 대답하는 방법 을 보여 주기 때문에 질문에 직접 대답하지 않습니다 .
bgStack15

5
이것이 가장 유용한 답변 중 하나입니다. 다단계 인증도 관찰하고 이해할 수 있습니다.
Pierre D

저는 그 멋진 도구에 묻혀있는이 기능에 대해 몰랐습니다. 매우 유용합니다!
Timothy C. Quinn

52

인터넷 검색 후 다음을 발견했습니다.

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

작동하는지는 모르겠지만 올바른 방향으로 인도 할 수 있습니다.


9
이는 양식 제출을 예상하는 웹 사이트가있는 경우 작동합니다. 소스를보고 <form> 이미지를 찾은 다음 필드의 이름과 게시해야하는 URL을 확인해야합니다. 웹 브라우저 디버거를 사용하여 게시 요청을 찾을 수 있으므로 전송되는 내용을 볼 수 있습니다. 그것은 조금 더 쉽습니다.
stonefury 2014 년

0

내 대답은 @JoeMills 및 @user의 이전 답변의 모드입니다.

  1. cURL서버에 로그인 하는 명령을 가져옵니다.

    • 웹 사이트의 로그인 페이지를로드하고 개발자 도구의 네트워크 창을 엽니 다.
      • Firefox에서 페이지를 마우스 오른쪽 버튼으로 클릭하고 '요소 검사 (Q)'를 선택한 다음 네트워크 탭을 클릭합니다.
    • 로그인 양식으로 이동하여 사용자 이름, 비밀번호를 입력하고 로그인하십시오.
    • 로그인 한 후 네트워크 창으로 돌아가서 상단으로 스크롤하여 POST 항목을 찾습니다. 마우스 오른쪽 버튼을 클릭하고 복사-> 컬로 복사를 선택합니다.
    • 이것을 텍스트 편집기에 붙여넣고 명령 프롬프트에서 시도하여 작동하는지 확인하십시오.
      • 일부 사이트는 우회하기 위해 아래 단계가 더 필요한 이러한 유형의 로그인 스푸핑을 차단하는 강화 기능이있을 수 있습니다.
  2. 로그인 후 세션 쿠키를 저장할 수 있도록 cURL 명령 수정

    • 항목 제거 -H 'Cookie: <somestuff>'
    • curl처음에 추가-c login_cookie.txt
    • 이 업데이트 된 curl 명령을 실행 'login_cookie.txt'하면 동일한 폴더에 새 파일이 생성 됩니다.
  3. 로그인이 필요한이 새 쿠키를 사용하여 새 웹 페이지를 호출하십시오.

    • curl -b login_cookie.txt <url_that_requires_log_in>

우분투 20.04에서 이것을 시도했으며 매력처럼 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.