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

두 페이지가 있습니다 : 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를 사용하므로 문제가되지 않습니다. 어떤 제안? 감사



답변

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

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

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


답변

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

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

스크린 샷


답변

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

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

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


답변

내 대답은 @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에서 이것을 시도했으며 매력처럼 작동합니다.


답변