我读到用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 -

我错过了什么?


当前回答

如果您已经在应用程序中发出了该请求,并且看到它已登录到谷歌Dev Tools中,那么您可以在网络选项卡中的请求上右键单击上下文菜单中使用复制cURL命令。Copy ->复制为cURL。 它将包含所有的头文件,cookie等。

其他回答

这招对我很管用:

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

我可以看到后端使用的价值

print(request.cookies)

您可以参考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引擎,如果不是文件,则将传递给定的字符串。

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

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

有7个tab分开的字段,意思是域名,尾匹配,路径,安全,过期,名称,值。

如果您已经在应用程序中发出了该请求,并且看到它已登录到谷歌Dev Tools中,那么您可以在网络选项卡中的请求上右键单击上下文菜单中使用复制cURL命令。Copy ->复制为cURL。 它将包含所有的头文件,cookie等。

下面是发送cookie的正确方式的示例。-H 'cookie: key1=val2;key2 = val2;”

cURL还提供了—cookie的便利。跑男人卷还是tldr卷

这是从Chrome >检查>网络>复制为cURL。

curl 'https://www.example.com/api/app/job-status/' \
  -H 'authority: www.example.com' \
  -H 'sec-ch-ua: "Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.111.111 Safari/111.36' \
  -H 'content-type: application/json' \
  -H 'accept: */*' \
  -H 'origin: https://www.example.com' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://www.example.com/app/jobs/11111111/' \
  -H 'accept-language: en-US,en;q=0.9' \
  -H 'cookie: menuOpen_v3=true; imageSize=medium;' \
  --data-raw '{"jobIds":["1111111111111"]}' \
  --compressed