Farklı bir sayfadan giriş yapılmasını gerektiren bir sayfaya erişmek için CURL


125

2 sayfam var: xyz.com/ave xyz.com/b. Yalnızca xyz.com/bve yalnızca xyz.com/ailk oturum açarsam erişebilirim . Diğerine xyz.com/bgeçmeden erişiyorsanız , tarayıcı aracılığıyla erişim reddedildi (giriş için yönlendirme yok). Adresinden giriş yaptıktan sonra xyz.com/adiğerine erişebilirim.

Benim sorunum bunu curl komutunu kullanarak yapmak. xyz.com/aCurl kullanarak başarılı bir şekilde giriş yapabiliyorum , ancak sonra deniyorum xyx.com/bve erişim reddedildi.

Ben aşağıdakileri kullanıyorum:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

İkinci satırı kullanıcı / şifre kısmı ile & olmadan kullanmayı denedim ve hala çalışmıyor. Her iki sayfa da aynı CA'yı kullanır, bu nedenle bu bir sorun değildir. Baska öneri? Teşekkürler

Yanıtlar:


147

Web sitesi muhtemelen oturum bilgilerinizi saklamak için tanımlama bilgileri kullanır . Koştuğun zaman

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curliki ayrı seansta iki kez çalıştırılır. Bu nedenle, ikinci komut çalıştığında, 1. komut tarafından ayarlanan çerezler kullanılamaz; sanki abir tarayıcı oturumunda sayfaya giriş yapmış ve bfarklı bir sayfada sayfaya erişmeye çalışmışsınız gibi .

Yapmanız gereken , ilk komutla oluşturulan çerezleri kaydetmektir :

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

ve sonra ikinciyi çalıştırırken bunları tekrar okuyun:

curl --cookie ./somefile https://xyz.com/b

Alternatif olarak, aynı çerezleri kullanacağını düşündüğüm aynı komutla her iki dosyayı da indirmeyi deneyebilirsiniz.


Bu garip çünkü bunu denediğimde, içinde depolanan çerez somefileyol parametresini içerdiğinden ( /abu durumda) çalışmıyor ve ikinci çağrıya yönlendirilmiyor. Çerezi dosyada düzenlersem ve yalnızca bölü çizgisi koyarsam, çalışır (çerez ikinci çağrıya yönlendirilir). Yolun çerez dosyasında depolanmasını engellemenin mümkün olup olmadığını biliyor musunuz?
рüффп

124

Ayrıca, tarayıcı üzerinden giriş yapmak ve çerezler dahil tüm başlıkları içeren komutu almak isteyebilirsiniz:

Geliştirici Araçlarının Ağ sekmesini açın, oturum açın, gerekli sayfaya gidin, "cURL olarak kopyala" seçeneğini kullanın.

ekran görüntüsü


12
Bu derin bir cevap! Soruya doğrudan cevap vermiyor çünkü nasıl cevaplanacağını gösteriyor .
bgStack15

5
bu en kullanışlı cevaplardan biridir. Gerçekten çok adımlı kimlik doğrulamasını bile gözlemlemenizi ve anlamanızı sağlar.
Pierre D

Bu harika araçlara gömülü bu özelliği bilmiyordum. Süper kullanışlı!
Timothy C. Quinn

52

Biraz googling yaptıktan sonra şunu buldum:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

İşe yarayıp yaramayacağına dair hiçbir fikrim yok, ama sizi doğru yöne götürebilir.


9
Bu, bir formun gönderilmesini bekleyen bir web siteniz varsa işe yarayacaktır. Kaynağa bakmanız ve <form> resmini bulmanız ve alanların adının ne olduğunu ve hangi URL'ye gönderilmesi gerektiğini görmeniz gerekecektir. Gönderi isteğini aramak için web tarayıcınızın hata ayıklayıcısını kullanabilirsiniz, böylece neyin gönderildiğini görebilirsiniz. Bu biraz daha kolay.
stonefury

0

Cevabım, @ JoeMills ve @user'den gelen bazı önceki cevapların bir modudur.

  1. cURLSunucuda oturum açmak için bir komut alın :

    • Web sitesi için oturum açma sayfasını yükleyin ve Geliştirici Araçlarının Ağ bölümünü açın
      • Firefox'ta, sayfayı sağ tıklayın, 'Öğeyi İncele (Q)' seçeneğini seçin ve Ağ sekmesine tıklayın
    • Giriş formuna gidin, kullanıcı adı, şifre girin ve giriş yapın
    • Oturum açtıktan sonra, Ağ bölmesine geri dönün ve POST girişini bulmak için en üste kaydırın. Sağ tıklayın ve Kopyala -> CURL olarak Kopyala'yı seçin
    • Bunu bir metin düzenleyiciye yapıştırın ve çalışıp çalışmadığını görmek için komut isteminde bunu deneyin.
      • Bazı sitelerin, bu tür giriş sahtekarlığını engelleyecek ve atlamak için aşağıda daha fazla adım gerektirecek sağlamlaştırmaya sahip olması mümkündür.
  2. Giriş yaptıktan sonra oturum çerezini kaydedebilmek için cURL komutunu değiştirin

    • Girişi kaldır -H 'Cookie: <somestuff>'
    • curlBaşından sonra ekle-c login_cookie.txt
    • Bu güncellenmiş curl komutunu çalıştırmayı deneyin 'login_cookie.txt've aynı klasörde yeni bir dosya almalısınız
  3. Oturum açmanızı gerektiren bu yeni çerezi kullanarak yeni bir web sayfasını arayın

    • curl -b login_cookie.txt <url_that_requires_log_in>

Bunu Ubuntu 20.04'te denedim ve bir cazibe gibi çalışıyor.

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.