Çerez göndermek için cURL nasıl kullanılır?


296

Bunu okumak bukle ile Gönder kurabiye ama benim için değil, işlerin.

Ben bir RESTuç nokta var :

class LoginResource(restful.Resource):
    def get(self):
        print(session)
        if 'USER_TOKEN' in session:
            return 'OK'
        return 'not authorized', 401

Şu şekilde erişmeye çalıştığımda:

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"%

Benim yerim ~/Downloads/cookies.txt:

cat ~/Downloads/cookies.txt
USER_TOKEN=in

ve sunucu hiçbir şey almaz:

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 -

Eksik olan nedir?


-cSeçeneği eklemek, curlçerez dosyanızı çıktı çerez kavanozu olarak kullanmayı söyler , ki bu istediğiniz şey olmayabilir.
Blender

tek -bseçeneği olan bir kişi de aynı hatayı vererek çalışmıyor :(
daydreamer

-bçerez dosyasının biçimi sadece değil var=value, aynı zamanda kullanılan çerez kavanozu ile aynı olmalıdır -c. Bu seçenekle çerez gönderen bir siteye gidin ve ortaya çıkan dosyaya bir göz atın.
Barmar

-B çerez_dosyası Netscape / Mozilla biçiminde veya düz HTTP üstbilgilerinde olmalıdır. Aşağıda düz http başlıklarına bir örnek verilmiştir: Set-cookie: cookie_name = cookie_value; Bu asgari. Sonunda noktalı virgül unutmayın.
Alex

Yanıtlar:


495

Bu benim için çalıştı:

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

Ben arka uç kullanarak değeri görebiliyordu

print request.cookies

17
Hiç olmadığı sürece, çerez olarak kullanıcı belirteci için bir boole sahip olun, ancak bu şekilde giriş yapmadan kendilerini doğrulayabilirler.
matts1

15
Man sayfasına göre, seçenek için -b, --cookie, örneğin curl -b <file-or-pairs>, argüman '='sembole sahip bir dize ise , olduğu gibi iletilir, aksi takdirde çerez okumak için bir dosya adı olarak kabul edilir.
ryenus

62
noktalı virgül ile birden çok çerez ayarlanabilir--cookie "key1=val1;key2=val2;..."

Neden bu cevap üstte değil merak ediyorum ... Cevapları sıralama eklentisi kimse?
iomv

91

Çerezlerle nasıl çalışacağınıza dair eksiksiz bir eğitim için https://curl.haxx.se/docs/http-cookies.html adresine bakabilirsiniz . Kullanabilirsiniz

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

bir çerez dosyasına yazmak ve motoru çalıştırmak ve çerez kullanmak için

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

çerezleri okumak ve çerez motorunu çalıştırmak için veya bir dosya değilse verilen dizgiden geçecektir.


1
- IMO çamura olarak açıktır resmi doküman üzerinde geliştirmek vermedi aşırı yüklenme yanında bir -btemel fark arasındaki farkın ne bayrak -c& -bikisi de bir çerez dosyasına motoru ve başlangıç noktası?
16:50, nhed

4
@nhed çerez dosyasına -c yazar , dosyadan -bokur. Bu nedenle, bir giriş formu için kimlik bilgileri gönderirken -c, ortaya çıkan çerezi bir dosyaya yazmayı seçersiniz, o zaman bir -bsonraki isteğinize çerezi okumak ve dahil etmek için kullanırsınız.
Madbreaks

26
Ya da tarayıcılar gibi aynı çerez deposunu curl -b cookiefile -c cookiefile https://yourhost/okumak ve yazmak için yapın.
Linux İlkesi

38

Çerez dosyanızda yanlış bir biçim kullanıyorsunuz. Gibi bukle dokümantasyon devletler, bu web tarayıcıları tarafından kullanılan biçimden farklı bir Nestscape çerez dosya biçimini kullanır. Manuel olarak bir kıvırmak çerez dosyası oluşturmanız gerekiyorsa, bu gönderi size yardımcı olacaktır. Örneğinizde dosya aşağıdaki satırı içermelidir

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

anlam 7 TAB ayrılmış alanlar olan domain , tailmatch , yolunu , güvenli , süresi dolmadan , isim , değer .


2
Evet, bu cURL çerez biçimidir. Bunlar SEKMELER değil, SEKMELER.
m3nda

4
Bu, resmi cevap olarak işaretlenmelidir, çünkü bu, @ daydreamer'in kurulumunun neden başarısız olduğu konusunu gerçekten ele alır.
Valber

0

Bu isteği uygulamanızda zaten yaptıysanız ve isteğin Google Geliştirici Araçları'nda günlüğe kaydedildiğini görürseniz, ağ sekmesindeki isteğe sağ tıkladığınızda içerik menüsünden kopya cURL komutunu kullanabilirsiniz. Kopyala -> cURL olarak kopyala. Tüm başlıkları, çerezleri vb. İçerecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.