Як використовувати CURL для надсилання файлів cookie?


296

Я читав, що Надсилання файлів 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, що може бути не тим, що ви хочете.
Блендер

той, що має лише один -bваріант, також не працює, даючи ту саму помилку :(
daydreamer

формат -bфайлу cookie не просто var=value, він повинен бути таким же, як і формат файлу cookie, написаного за допомогою -c. Перейдіть на сайт, який надсилає файли cookie з цією опцією, і перегляньте отриманий файл.
Бармар

Файл -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, враховуючи, що вони можуть просто автентифікувати себе, не входячи таким чином.
матс1

15
Згідно з довідковою сторінкою, для параметра -b, --cookie, наприклад curl -b <file-or-pairs>, якщо аргумент - це рядок із '='символом, він передається як є, інакше трактується як ім'я файлу для читання файлів cookie.
ryenus

61
декілька файлів cookie можна встановити крапками з комою--cookie "key1=val1;key2=val2;..."

Чому ця відповідь не зверху? Цікаво ... Плагін для сортування відповідей кого-небудь?
iomv

91

Ви можете ознайомитися на 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, або якщо це не файл, він передасть заданий рядок.


1
ІМО ви не посилював на офіційному документ , який ясно , як бруду - поруч з перевантаженням на -bпрапорі , що є істотним відмінностей між -cі -bвони обидва запуску двигуна і вказати на файл печива?
nhed

4
@nhed -c записує у файл cookie, -bчитає з нього. Отже, надсилаючи облікові дані для форми реєстрації, ви б хотіли вказати, -cщоб записати файли cookie у файл, тоді ви будете використовувати -bдля читання та включення файлу cookie у наступний запит.
Madbreaks

26
Або curl -b cookiefile -c cookiefile https://yourhost/читати і писати в той самий магазин файлів cookie, як і браузери.
LinuxDisciple

38

Ви використовуєте неправильний формат у файлі cookie. Як зазначено в документації про згортання, він використовує старий формат файлів файлів cookie Netscape, який відрізняється від формату, який використовують веб-браузери. Якщо вам потрібно створити файл cookie для завитка вручну, ця публікація повинна вам допомогти. У вашому прикладі файл повинен містити наступний рядок

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

маючи 7 розділених TAB-полів, що означають домен , хвостовий ряд , шлях , захищений , закінчується , ім’я , значення .


2
Так, це формат файлів cookie CURL. Це ТАБИ, а не ПРОСТОРИ.
м3нда

4
Це слід позначати як офіційну відповідь, оскільки це справді вирішує питання щодо того, чому налаштування @ daydreamer не вдалося.
Вальбер

0

Якщо ви вже зробили цей запит у вашій програмі та бачите, що він увійшов у Google Dev Tools, ви можете скористатися командою копіювати cURL з контекстного меню, клацнувши правою кнопкою миші на запиті на вкладці мережі. Копіювати -> Копіювати як CURL. Він буде містити всі заголовки, файли cookie тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.