किसी ऐसे पृष्ठ तक पहुंचने के लिए CURL जिसे किसी भिन्न पृष्ठ से लॉगिन की आवश्यकता होती है


125

मेरे पास 2 पृष्ठ हैं: xyz.com/aऔर xyz.com/b। मैं केवल तभी पहुंच सकता हूं xyz.com/bजब मैं xyz.com/aपहली बार लॉगइन करूंगा । यदि xyz.com/bदूसरे के माध्यम से जाने के बिना, मुझे बस ब्राउज़र के माध्यम से प्रवेश निषेध (लॉगिन करने के लिए कोई पुनर्निर्देशित नहीं) मिलता है। एक बार जब मैं लॉगिन xyz.com/aकर लेता हूं, तो मैं दूसरे तक पहुंच सकता हूं।

मेरी समस्या यह कर्ल कमांड का उपयोग करके कर रही है। मैं xyz.com/aकर्ल का उपयोग करके सफलतापूर्वक लॉगिन कर सकता हूं , लेकिन फिर प्रयास करें xyx.com/bऔर मुझे एक्सेस से वंचित कर दिया जाए।

मैं निम्नलिखित का उपयोग करता हूं:

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

मैंने उपयोगकर्ता / पासवर्ड भाग के साथ और उसके बिना दूसरी पंक्ति का उपयोग करने की कोशिश की है और फिर भी काम नहीं कर रहा है। दोनों पृष्ठ समान CA का उपयोग करते हैं, इसलिए यह कोई समस्या नहीं है। कोई सुझाव? धन्यवाद

जवाबों:


147

वेब साइट संभवतः आपकी सत्र जानकारी को संग्रहीत करने के लिए कुकीज़ का उपयोग करती है। जब तुम दौड़ते हो

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

curlदो अलग-अलग सत्रों में दो बार चलाया जाता है। इस प्रकार जब दूसरी कमांड चलती है, तो 1 कमांड द्वारा सेट कुकीज़ उपलब्ध नहीं हैं; यह वैसा ही है जैसे आपने aएक ब्राउज़र सत्र में पृष्ठ में लॉग इन किया था , और पृष्ठ bको किसी भिन्न में एक्सेस करने का प्रयास किया ।

आपको जो करने की आवश्यकता है वह पहले कमांड द्वारा बनाई गई कुकीज़ को बचाने के लिए है:

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

और फिर दूसरे को चलाने पर उन्हें वापस पढ़ें:

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

वैकल्पिक रूप से आप दोनों फ़ाइलों को एक ही कमांड में डाउनलोड करने का प्रयास कर सकते हैं, जो मुझे लगता है कि एक ही कुकीज़ का उपयोग करेगा।


यह अजीब है क्योंकि जब मैं यह कोशिश करता हूं, तो यह somefileपथ पैरामीटर ( /aइस मामले में) में संग्रहीत कुकी के रूप में काम नहीं करता है और इसे दूसरी कॉल पर अग्रेषित नहीं किया जाता है। अगर मैं फ़ाइल में कुकी को संपादित करता हूं और केवल एक स्लैश डालता हूं, तो यह काम करता है (कुकी दूसरी कॉल पर अग्रेषित)। क्या आप जानते हैं कि क्या कुकी फ़ाइल में पथ के संग्रहण को रोकना संभव है?
рüффп

124

इसके अलावा आप ब्राउज़र के माध्यम से लॉग इन करना चाहते हैं और कुकीज़ सहित सभी हेडर के साथ कमांड प्राप्त कर सकते हैं:

डेवलपर टूल का नेटवर्क टैब खोलें, लॉग इन करें, आवश्यक पृष्ठ पर नेविगेट करें, "प्रतिलिपि के रूप में कॉपी करें" का उपयोग करें।

स्क्रीनशॉट


12
यह एक गहरा जवाब है! यह सीधे सवाल का जवाब नहीं देता है, क्योंकि यह दिखाता है कि इसका जवाब कैसे देना है।
bgStack15

5
यह सबसे उपयोगी उत्तरों में से एक है। यह वास्तव में आपको बहु-चरणीय प्रमाणीकरण देखने और समझने की अनुमति देता है।
पियरे डी

मुझे उन भयानक उपकरणों में दफन इस सुविधा के बारे में नहीं पता था। सुपर उपयोगी!
टिमोथी सी। क्विन

52

कुछ गुगली करने के बाद मैंने पाया:

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

कोई विचार नहीं अगर यह काम करता है, लेकिन यह आपको सही दिशा में ले जा सकता है।


9
यदि आपके पास एक वेब साइट है जो फॉर्म जमा करने की अपेक्षा करती है तो यह काम करेगा। आपको स्रोत को देखने और <फ़ॉर्म> छवि ढूंढने और यह देखने की आवश्यकता होगी कि फ़ील्ड का नाम क्या है और URL को किस पर पोस्ट करने की आवश्यकता है। आप पोस्ट अनुरोध को देखने के लिए अपने वेब ब्राउज़र डीबगर का उपयोग कर सकते हैं ताकि आप देख सकें कि क्या भेजा जा रहा है। यह थोड़ा आसान है।
पत्थरबाज़

0

मेरा उत्तर @JoeMills और @user से कुछ पूर्व उत्तर का एक मॉड है।

  1. cURLसर्वर में लॉग इन करने के लिए एक कमांड प्राप्त करें:

    • वेबसाइट के लिए लॉगिन पेज लोड करें और डेवलपर टूल के नेटवर्क फलक को खोलें
      • फ़ायरफ़ॉक्स में, राइट क्लिक पेज, 'इंस्पेक्ट एलिमेंट (क्यू)' चुनें और नेटवर्क टैब पर क्लिक करें
    • लॉगइन फॉर्म में जाएं, यूजरनेम, पासवर्ड डालें और लॉग इन करें
    • लॉग इन करने के बाद, नेटवर्क फलक पर वापस जाएं और POST प्रविष्टि खोजने के लिए ऊपर की ओर स्क्रॉल करें। राइट क्लिक करें और CURL के रूप में कॉपी -> कॉपी चुनें
    • इसे टेक्स्ट एडिटर को पेस्ट करें और कमांड प्रॉम्प्ट में यह देखने की कोशिश करें कि क्या यह काम करता है
      • यह संभव है कि कुछ साइटों को सख्त किया जाए जो इस प्रकार के लॉगिन स्पूफिंग को अवरुद्ध कर देंगी जिन्हें बायपास करने के लिए नीचे अधिक चरणों की आवश्यकता होगी।
  2. लॉगिन के बाद सत्र कुकी को बचाने में सक्षम होने के लिए CURL कमांड को संशोधित करें

    • प्रविष्टि निकालें -H 'Cookie: <somestuff>'
    • curlशुरुआत के बाद जोड़ें-c login_cookie.txt
    • इस अद्यतन कर्ल कमांड को चलाने का प्रयास करें और आपको 'login_cookie.txt'उसी फ़ोल्डर में एक नई फ़ाइल मिलनी चाहिए
  3. इस नए कुकी का उपयोग करके एक नया वेब पेज कॉल करें जिसके लिए आपको लॉग इन होना चाहिए

    • curl -b login_cookie.txt <url_that_requires_log_in>

मैंने Ubuntu 20.04 पर यह कोशिश की है और यह एक आकर्षण की तरह काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.