cURLを使用してCookieを送信する方法


296

はcurlSend cookieが機能することを読みましたが、私には違います。

私は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すると、Cookieファイルを出力Cookie jarとして使用するように指示されます。
Blender 2013

1 -bのオプションは、単独でも:(同じエラーを与えて、働いていない
空想家

-bCookieファイルの形式はだけvar=valueではなく、を使用して記述されたCookie jarの形式と同じである必要があり-cます。このオプションでCookieを送信するサイトに移動し、結果のファイルを確認します。
Barmar 2013

-b cookie_fileは、Netscape / Mozilla形式またはプレーンHTTPヘッダーである必要があります。プレーンなhttpヘッダーの例を以下に示します。Set-cookie:cookie_name = cookie_value; これは最低限必要なことです。最後のセミコロンを忘れないでください。
アレックス

回答:


492

これは私のために働きました:

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

私はバックエンドで値を見ることができました

print request.cookies

17
あなたが決してそうでない限り、ユーザートークンのブール値をcookieとして保持することはできません。
matts1 2014年

15
マニュアルページによると、オプションの場合-b, --cookie、たとえばcurl -b <file-or-pairs>、引数が'='記号を持つ文字列の場合、そのまま渡されます。それ以外の場合は、Cookieを読み取るファイル名として扱われます。
ryenus 2014年

61
セミコロンで複数のCookieを設定できます--cookie "key1=val1;key2=val2;..."

なぜこの答えが上にないのでしょうか...答えを並べ替えるプラグインの誰かですか?
iomv

91

Cookieの操作方法の完全なチュートリアルについては、https://curl.haxx.se/docs/http-cookies.htmlを参照してください。使用できます

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

cookieファイルに書き込み、エンジンを起動し、使用できるcookieを使用する

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

からCookieを読み取ってCookieエンジンを起動するか、ファイルでない場合は指定された文字列を渡します。


1
IMOあなたは泥のように明確で公式ドキュメントに増強しなかった- オーバーロードのそば-b間の本質的な差分が何であるかをフラグ-c-bクッキーファイルにエンジンやポイントを開始し、両方の彼ら?
2016年

4
@nhed -c cookieファイルに書き込み-b読み取ります。したがって、ログインフォームの認証情報を送信する場合-c、結果のCookieをファイルに書き込むように指定し、次にを使用-bしてCookieを読み取り、次のリクエストに含める必要があります。
Madbreaks

26
または、ブラウザと同じように、同じCookieストアのcurl -b cookiefile -c cookiefile https://yourhost/読み取り書き込みを行います。
LinuxDisciple 2016年

38

Cookieファイルで間違った形式を使用しています。カールドキュメントの状態は、Webブラウザで使用される形式とは異なり、古いNetscapeクッキーファイル形式を使用しています。curl cookieファイルを手動で作成する必要がある場合は、この投稿が役立ちます。あなたの例では、ファイルには次の行が含まれている必要があります

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

意味7 TAB区切りのフィールド持つドメインtailmatchパス安全な有効期限が切れ名前値を


2
はい、これはcURL Cookie形式です。これらはスペースではなくタブです。
m3nda

4
これは、@ daydreamerのセットアップが失敗した理由を正確に示しているため、公式の回答としてマークする必要があります。
Valber

0

アプリケーションでそのリクエストを既に作成し、Google Dev Toolsにログが記録されている場合、ネットワークタブでリクエストを右クリックすると、コンテキストメニューからcURLのコピーコマンドを使用できます。コピー-> cURLとしてコピーします。すべてのヘッダー、Cookieなどが含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.