Czytam, że Wyślij ciasteczka z zawijaniem działa, ale nie dla mnie.
Mam REST
punkt końcowy jako:
class LoginResource(restful.Resource):
def get(self):
print(session)
if 'USER_TOKEN' in session:
return 'OK'
return 'not authorized', 401
Kiedy próbuję uzyskać dostęp jako:
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"%
Gdzie ~/Downloads/cookies.txt
jest mój :
cat ~/Downloads/cookies.txt
USER_TOKEN=in
a serwer nic nie otrzymuje:
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 -
Czego mi brakuje?
-c
opcji nakazujecurl
użycie pliku cookie jako wyjściowego słoika z ciasteczkami, co może nie być tym, czego chcesz.-b
samą opcją również nie działa, dając ten sam błąd :(-b
pliku cookie jest nie tylkovar=value
, powinien być taki sam jak format pliku cookie zapisanego przy użyciu-c
. Przejdź do strony, która wysyła pliki cookie z tą opcją, i spójrz na wynikowy plik.Odpowiedzi:
To działało dla mnie:
Mogłem zobaczyć wartość za pomocą backendu
źródło
-b, --cookie
, np.curl -b <file-or-pairs>
Jeśli argument jest ciągiem zawierającym'='
symbol, jest przekazywany tak, jak jest, w przeciwnym razie jest traktowany jako nazwa pliku, z którego można odczytać plik cookie.--cookie "key1=val1;key2=val2;..."
Możesz zapoznać się z https://curl.haxx.se/docs/http-cookies.html, aby uzyskać pełny samouczek na temat pracy z plikami cookie. Możesz użyć
zapisać plik cookie i uruchomić silnik oraz użyć pliku cookie, którego możesz użyć
aby odczytać pliki cookie i uruchomić silnik plików cookie, lub jeśli nie jest to plik, przekaże podany ciąg.
źródło
-b
flagą, co jest niezbędne diff pomiędzy-c
&-b
oboje uruchomić silnik i wskaż plik ciasteczka?-c
zapisuje do pliku cookie,-b
odczytuje z niego. Tak więc, wysyłając dane uwierzytelniające do formularza logowania, zdecydujesz-c
się zapisać wynikowy plik cookie do pliku, a następnie użyjesz go-b
do odczytania i dołączenia pliku cookie do następnego żądania.curl -b cookiefile -c cookiefile https://yourhost/
czytać i pisać w tym samym sklepie z ciasteczkami, co przeglądarki.Używasz niewłaściwego formatu w swoim pliku cookie. Jak stwierdza dokumentacja curl , używa starego formatu pliku cookie Netscape, który różni się od formatu używanego przez przeglądarki internetowe. Jeśli musisz ręcznie utworzyć plik cookie curl, ten post powinien ci pomóc. W twoim przykładzie plik powinien zawierać następujący wiersz
posiadający 7 pól oddzielonych TAB, co oznacza domenę , dopasowanie , ścieżkę , bezpieczeństwo , wygasa , nazwę , wartość .
źródło
Jeśli już złożyłeś to żądanie w swojej aplikacji i widzisz je jako zalogowane w Google Dev Tools, możesz użyć polecenia kopiuj cURL z menu kontekstowego, klikając prawym przyciskiem myszy żądanie na karcie sieci. Kopiuj -> Kopiuj jako cURL. Będzie zawierać wszystkie nagłówki, pliki cookie itp.
źródło