कर्ल का उपयोग करके प्राधिकरण हेडर कैसे सेट करें


397

CURL का उपयोग करके मैं प्राधिकरण शीर्ष लेख कैसे पास करूं? (निष्पादन योग्य /usr/bin/curl)।

जवाबों:


394

http://curl.haxx.se/docs/httpscripting.html

भाग 6 देखें। HTTP प्रमाणीकरण

HTTP प्रमाणीकरण

HTTP प्रमाणीकरण, सर्वर को आपका उपयोगकर्ता नाम और पासवर्ड बताने की क्षमता है ताकि यह सत्यापित कर सके कि आप जो अनुरोध कर रहे हैं उसे करने की अनुमति है। HTTP में उपयोग किया जाने वाला बेसिक प्रमाणीकरण (जो डिफ़ॉल्ट रूप से कर्ल टाइप का उपयोग होता है) सादा पाठ आधारित होता है, जिसका अर्थ है कि यह उपयोगकर्ता नाम और पासवर्ड को केवल थोड़े से मोटे तौर पर भेजता है, लेकिन फिर भी किसी के द्वारा पूरी तरह से पढ़ने योग्य है जो आपके और दूरस्थ सर्वर के बीच नेटवर्क पर सूँघता है।

प्रमाणीकरण के लिए उपयोगकर्ता और पासवर्ड का उपयोग करने के लिए कर्ल बताने के लिए:

curl --user name:password http://www.example.com

साइट को एक अलग प्रमाणीकरण विधि की आवश्यकता हो सकती है (सर्वर द्वारा दिए गए हेडर की जांच करें), और फिर --ntlm, --digest, --negotiate या यहां तक ​​कि - कन्या आपके लिए उपयुक्त विकल्प हो सकते हैं।

कभी-कभी आपकी HTTP एक्सेस केवल HTTP प्रॉक्सी के उपयोग के माध्यम से उपलब्ध होती है। यह विभिन्न कंपनियों में विशेष रूप से आम लगता है। एक HTTP प्रॉक्सी को क्लाइंट के इंटरनेट के माध्यम से प्राप्त करने की अनुमति देने के लिए अपने स्वयं के उपयोगकर्ता और पासवर्ड की आवश्यकता हो सकती है। कर्ल के साथ उन लोगों को निर्दिष्ट करने के लिए, कुछ इस तरह से चलाएं:

curl --proxy-user proxyuser:proxypassword curl.haxx.se

यदि आपके प्रॉक्सी को NTLM विधि का उपयोग करके प्रमाणीकरण की आवश्यकता होती है, तो --proxy-ntlm का उपयोग करें, यदि इसके लिए डाइजेस्ट उपयोग --proxy-digest की आवश्यकता हो।

यदि आप इनमें से किसी एक उपयोगकर्ता + पासवर्ड विकल्प का उपयोग करते हैं, लेकिन पासवर्ड भाग को छोड़ देते हैं, तो कर्ल अंतःक्रियात्मक रूप से पासवर्ड के लिए संकेत देगा।

ध्यान दें कि जब कोई प्रोग्राम चलाया जाता है, तो इसके पैरामीटर सिस्टम की चल रही प्रक्रियाओं को सूचीबद्ध करते समय देख सकते हैं। इस प्रकार, अन्य उपयोगकर्ता आपके पासवर्ड को देखने में सक्षम हो सकते हैं यदि आप उन्हें सादे कमांड लाइन विकल्प के रूप में पास करते हैं। इसे दरकिनार करने के तरीके हैं।

यह ध्यान देने योग्य है कि जबकि यह है कि HTTP प्रमाणीकरण कैसे काम करता है, बहुत से वेब साइट इस अवधारणा का उपयोग नहीं करेंगे जब वे लॉगिन आदि प्रदान करते हैं। उस पर अधिक जानकारी के लिए नीचे वेब लॉगिन अध्याय देखें।


16
@ यह प्रश्न स्पष्ट रूप से PHP के बारे में नहीं है। [Google के परिणामों में क्या गड़बड़ है]?
ओली

सवाल प्राधिकरण नहीं प्रमाणीकरण के बारे में है, इसलिए हो सकता है ओ पी सवाल का शीर्षक बदलना चाहिए
जाम

320

बस आपको क्लिक-थ्रू जोड़ना नहीं है:

curl --user name:password http://www.example.com

या यदि आप OAuth 2 के लिए प्रमाणीकरण भेजने की कोशिश कर रहे हैं:

curl -H "Authorization: OAuth <ACCESS_TOKEN>" http://www.example.com

15
कई एपीआई अब हेडर प्राधिकरण टोकन का उपयोग करते हैं। -Hविकल्प महान है।
एलिकोस

14
यदि आप -u या --user का उपयोग करते हैं, तो कर्ल Base64 में क्रेडेंशियल्स को एनकोड करेगा और इस तरह एक हेडर का उत्पादन करेगा:-H Authorization: Basic <Base64EncodedCredentials>
टिमोथी कांसकी

मैं एक प्राधिकरण शीर्ष लेख जोड़ने की कोशिश कर रहा हूँ जिसमें HMAC-SHA256हमेशा गुम प्राधिकरण प्राधिकरण की एक त्रुटि हो रही है
स्टीवन एगुइलर

2
साथ ही, यदि आप की जरूरत <Base64EncodedCredentials>के रूप में द्वारा @ टिमोथी-kansaki उल्लेख किया है, आप प्राप्त कर सकते हैं एन्कोडेड क्रेडेंशियल आदेश का उपयोग: cred="$( echo $NAME:$PASSWORD | base64 )"; curl -H "Authorization: Basic $cred" https://example.com। संदर्भ के लिए, देखें stackoverflow.com/questions/16918602/…
डेविड गोलेबॉवस्की

170

बियर के टोकन इस तरह दिखते हैं:

curl -H "Authorization: Bearer <ACCESS_TOKEN>" http://www.example.com

7
और अगर आप 'बेसिक' ऑथराइजेशन करना चाहते हैं, तो 'बेसिक' के लिए 'बेयरर' को स्वैप करें
एक darren

मुझे सबसे अजीब चीज मिल गई है, मुझे "प्राधिकरण हेडर का गलत प्रारूप" और "HTTP-200" मिल रहा है। तो सर्वर मेरे प्राधिकरण को स्वीकार करता है, लेकिन प्रारूप गलत है?
ग्रोस्तव

64

(जो लोग php- कर्ल उत्तर की तलाश में हैं)

$service_url = 'https://example.com/something/something.json';
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password"); //Your credentials goes here
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); //IMP if the url has https and you don't want to verify source certificate

$curl_response = curl_exec($curl);
$response = json_decode($curl_response);
curl_close($curl);

var_dump($response);

64

यह मेरे लिए काम किया:

 curl -H "Authorization: Token xxxxxxxxxxxxxx" https://www.example.com/

आप JWT के लिए क्या उपयोग कर रहे हैं?
साइस्टो पाइक्ज

1
क्या आपका मतलब नहीं है Authorization: bearer xxxxxxxxx?
jlh

@ आप का मतलब हैBearer
डैनियल डब्ल्यू।

मुझे लगभग यकीन था कि यह केस-असंवेदनशील है, लेकिन ऐसा लगता है कि मैं गलत हूं। हां मेरा मतलब था Bearer
jlh

20

HTTP बेसिक प्रमाणीकरण के लिए:

curl -H "Authorization: Basic <_your_token_>" http://www.example.com

बदलें _your_token_और URL।


ऑउथ का उपयोग करते समय प्राधिकरण टोकन कहां से आएगा? मैं एक ऐसी साइट से फ़ाइलों को डाउनलोड करने के लिए कर्ल का उपयोग करने की कोशिश कर रहा हूं, जहां मैं एक उपयोगकर्ता और पासवर्ड का उपयोग करता हूं, लेकिन उपयोग में oauth2 के कारण यह विफल हो रहा है।
ctrl-alt-delete

@toasteez आपको टोकन प्राप्त करने के लिए Oauth2 प्रवाह से गुजरना होगा। आमतौर पर इसकी एक दो कदम प्रक्रिया और सर्वर के प्रलेखन में विस्तृत होनी चाहिए।
देवरूप

13
अच्छा उत्तर। एक छोटा सहायक echo -ne "<your-user>:<your-pass>" | base64 --wrap 0मूल ओर्गेनिक टोकन उत्पन्न करेगा।
माइक डी

3
@ मायकेडी -H "Authorization: Basic <_your_token_>"जैसा प्रभाव डालता है --user login:password। आप के साथ यह जाँच कर सकते हैंcurl -v
vladkras

1
@vladkras मेरी प्रतिक्रिया इस उत्तर के लिए एक सहायक है । मेरे अनुभव में, यह समझने के लिए बेहतर है कि इसे बनाने के लिए कर्ल पर निर्भर होने के बजाय टोकन कैसे बनाया जाए।
माइक डी

14

सावधान रहें कि जब आप उपयोग कर रहे हों: curl -H "Authorization: token_str" http://www.example.com

token_strऔर Authorizationसफेद स्थान से अलग होना चाहिए, अन्यथा सर्वर-साइड को HTTP_AUTHORIZATIONवातावरण नहीं मिलेगा ।


2
सच नहीं है, यदि एक सफेद स्थान की आवश्यकता है, तो आपका HTTP सर्वर टूट गया है। इसके अलावा आपको दो प्रकारों की आवश्यकता है और फिर एक टोकन।
एलेक्सिस विलके

5

यदि आपके पास कॉल के समय टोकन नहीं है, तो आपको दो कॉल करने होंगे, एक टोकन प्राप्त करने के लिए और दूसरा टोकन फॉर्म निकालने के लिए प्रतिक्रिया के लिए, ध्यान देना होगा

grep टोकन | cut -d, -f1 | कट -d \ "-f4

जैसा कि यह हिस्सा है जो प्रतिक्रिया से टोकन निकालने के साथ काम कर रहा है।

echo "Getting token response and extracting token"    
def token = sh (returnStdout: true, script: """
    curl -S -i -k -X POST https://www.example.com/getToken -H \"Content-Type: application/json\" -H \"Accept: application/json\" -d @requestFile.json | grep token | cut -d, -f1 | cut -d\\" -f4
""").split()

टोकन निकालने के बाद आप टोकन का उपयोग निम्न प्रकार से कॉल करने के लिए कर सकते हैं।

echo "Token : ${token[-1]}"       
echo "Making calls using token..."       
curl -S -i -k  -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ${token[-1]}" https://www.example.com/api/resources 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.