371

我读到使用 curl 发送 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 -

我错过了什么?

4

7 回答 7

643

这对我有用:

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

我可以看到后端使用的值

print(request.cookies)
于 2013-04-14T05:32:08.610 回答
103

您可以参考https://curl.haxx.se/docs/http-cookies.html以获取有关如何使用 cookie 的完整教程。您可以使用

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

写入 cookie 文件并启动引擎并使用 cookie,您可以使用

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

从中读取 cookie 并启动 cookie 引擎,或者如果它不是文件,它将传递给定的字符串。

于 2014-04-13T04:15:00.007 回答
48

您在 cookie 文件中使用了错误的格式。正如curl 文档所述,它使用旧的 Netscape cookie 文件格式,这与 Web 浏览器使用的格式不同。如果您需要手动创建 curl cookie 文件,这篇文章应该对您有所帮助。在您的示例中,该文件应包含以下行

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

有 7 个制表符分隔的字段,表示domaintailmatchpathsecureexpiresnamevalue

于 2014-12-16T16:25:10.680 回答
6

如果您已经在应用程序中发出了该请求,并且在 Google 开发工具中看到它已记录,您可以在网络选项卡中右键单击请求时使用上下文菜单中的复制 cURL 命令。复制 -> 复制为 cURL。它将包含所有标题、cookie 等。

于 2020-06-10T15:56:10.767 回答
5

curl -H @<header_file> <host>

由于文件中的 curl 7.55 标头支持@<file>

echo 'Cookie: USER_TOKEN=Yes' > /tmp/cookie

curl -H @/tmp/cookie <host>

文档和提交

于 2021-02-13T22:33:39.817 回答
3

我正在使用 Debian,但无法使用波浪号作为路径。最初我正在使用

curl -c "~/cookie" http://localhost:5000/login -d username=myname password=mypassword

我不得不将其更改为:

curl -c "/tmp/cookie" http://localhost:5000/login -d username=myname password=mypassword

-c创建 cookie,-b使用 cookie

那么我会使用例如:

curl -b "/tmp/cookie" http://localhost:5000/getData
于 2020-11-18T16:06:45.717 回答
0

我在 Windows 上使用 GitBash,但没有发现对我有用。

所以我决定将我的 cookie 保存到一个名为.session并使用 cat 读取它的文件,如下所示:

curl -b $(cat .session) http://httpbin.org/cookies

如果你很好奇,我的 cookie 看起来像这样:

session=abc123
于 2021-12-02T21:11:59.723 回答