cURL을 사용하여 쿠키를 보내는 방법?


296

curl이있는 쿠키 보내기가 작동하지만 나에게는 그렇지 않다는 것을 읽었 습니다.

나는 다음과 같은 REST엔드 포인트를 가지고 있다 :

class LoginResource(restful.Resource):
    def get(self):
        print(session)
        if 'USER_TOKEN' in session:
            return 'OK'
        return 'not authorized', 401

내가 다음과 같이 액세스하려고하면 :

curl -v -b ~/Downloads/cookies.txt -c ~/Downloads/cookies.txt http://127.0.0.1:5000/
* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.27.0
> Host: 127.0.0.1:5000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 401 UNAUTHORIZED
< Content-Type: application/json
< Content-Length: 16
< Server: Werkzeug/0.8.3 Python/2.7.2
< Date: Sun, 14 Apr 2013 04:45:45 GMT
<
* Closing connection #0
"not authorized"%

내 곳 ~/Downloads/cookies.txt은 :

cat ~/Downloads/cookies.txt
USER_TOKEN=in

서버는 아무것도받지 못합니다.

127.0.0.1 - - [13/Apr/2013 21:43:52] "GET / HTTP/1.1" 401 -
127.0.0.1 - - [13/Apr/2013 21:45:30] "GET / HTTP/1.1" 401 -
<SecureCookieSession {}>
<SecureCookieSession {}>
127.0.0.1 - - [13/Apr/2013 21:45:45] "GET / HTTP/1.1" 401 -

내가 무엇을 놓치고 있습니까?


-c옵션을 추가하면 curl쿠키 파일을 출력 쿠키 항아리로 사용하라는 메시지가 표시됩니다. 원하는 것이 아닐 수도 있습니다.
Blender

함께 하나의 -b옵션 만도 :( 같은 오류를주고, 작동하지 않는
공상가

-b쿠키 파일 의 형식은 단순한 것이 아니라 var=value사용하여 작성된 쿠키 jar 형식과 같아야합니다 -c. 이 옵션으로 쿠키를 보내는 사이트로 이동하여 결과 파일을 살펴보십시오.
Barmar

-b cookie_file은 Netscape / Mozilla 형식이거나 일반 HTTP 헤더 여야합니다. 다음은 일반 http 헤더의 예입니다. Set-cookie : cookie_name = cookie_value; 이것은 최소한입니다. 끝에 세미콜론을 잊지 마십시오.
Alex

답변:


492

이것은 나를 위해 일했다 :

curl -v --cookie "USER_TOKEN=Yes" http://127.0.0.1:5000/

백엔드의 값을 사용하여 볼 수 있습니다.

print request.cookies

17
절대로 그렇게하지 않는 한, 사용자 토큰에 대한 부울을 쿠키로 사용하면 쿠키를 사용하지 않고 자신을 인증 할 수 있다는 점만 고려하면됩니다.
matts1

15
man 페이지에 따르면 option의 경우 -b, --cookie, 예를 들어 curl -b <file-or-pairs>인수가 '='기호 가있는 문자열 인 경우 그대로 전달되고, 그렇지 않으면 쿠키를 읽을 파일 이름으로 처리됩니다.
ryenus

61
세미콜론으로 여러 쿠키를 설정할 수 있음--cookie "key1=val1;key2=val2;..."

왜이 답변이 궁금하지 않습니까? 답변 정렬 플러그인 누군가?
iomv

91

쿠키 작업 방법에 대한 전체 자습서는 https://curl.haxx.se/docs/http-cookies.html 을 참조하십시오 . 당신이 사용할 수있는

curl -c /path/to/cookiefile http://yourhost/

쿠키 파일에 쓰고 엔진을 시작하고 쿠키를 사용할 수 있습니다.

curl -b /path/to/cookiefile  http://yourhost/

쿠키 엔진에서 쿠키를 읽고 시작하거나 파일이 아닌 경우 주어진 문자열을 전달합니다.


1
- IMO 당신은 진흙으로 명확 공식 문서에 강화하지 않았다 오버로드 옆-b핵심은 diff 사이에 어떤 플래그 -c& -b둘 쿠키 파일에 엔진과 지점을 시작?
46 초에 종료

4
@nhed -c 쿠키 파일에 쓰고-b 읽습니다. 따라서 로그인 양식에 대한 신임 정보를 보낼 때 -c결과 쿠키를 파일에 쓰도록 지정 하면 -b다음 요청에서 쿠키를 읽고 포함하는 데 사용 됩니다.
Madbreaks

26
또는 할 curl -b cookiefile -c cookiefile https://yourhost/읽기 브라우저처럼 동일한 쿠키 저장소에 쓰기.
LinuxDisciple

38

쿠키 파일에서 잘못된 형식을 사용하고 있습니다. curl 문서에 나와 있듯이 웹 브라우저에서 사용하는 형식과 다른 이전 Netscape 쿠키 파일 형식을 사용합니다. curl 쿠키 파일을 수동으로 작성해야하는 경우이 게시물 이 도움이됩니다. 귀하의 예에서 파일은 다음 줄을 포함해야합니다

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

domain , tailmatch , path , secure , expires , name , value를 의미하는 7 개의 TAB 구분 필드 있습니다.


2
예, 이것이 cURL 쿠키 형식입니다. 이들은 공간이 아닌 탭입니다.
m3nda

4
@daydreamer의 설정이 실패한 이유를 진정으로 다루기 때문에 공식 답변으로 표시해야합니다.
Valber

0

애플리케이션에서 해당 요청을 이미 작성했으며 Google Dev Tools에 로그인 된 것으로 표시되는 경우 네트워크 탭에서 요청을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴에서 cURL 복사 명령을 사용할 수 있습니다. 복사-> cURL로 복사 모든 헤더, 쿠키 등이 포함됩니다.

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