CURL के साथ बियरर टोकन सेट करने का सही तरीका


87

मुझे API अंत बिंदु से अपना वाहक टोकन मिलता है और निम्नलिखित सेट करता है:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

आगे मैं सुरक्षित समापन बिंदु तक पहुंचने के लिए CURL का उपयोग करना चाहता हूं, हालांकि मैं इस बात पर अनिश्चित हूं कि बियरर टोकन को कैसे या कहां सेट किया जाए।

मैंने यह कोशिश की है, लेकिन यह काम नहीं करता है:

 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result);

संपादित करें:

प्रलेखन के अनुसार, मुझे इस तरह के वाहक टोकन का उपयोग करना चाहिए: https://apigility.org/documentation/auth/authentication-oauth2

GET /oauth/resource HTTP/1.1
Accept: application/json
Authorization: Bearer 907c762e069589c2cd2a229cdae7b8778caa9f07

क्या यह PHP है? सर्वर इस टोकन को भेजने की उम्मीद कैसे करता है? एक हेडर?

हाय - हाँ यह PHP है, आम तौर पर वाहक टोकन को हेडर के रूप में सेट किया जाता है।
HappyCoder

हेडर का नाम क्या है?

मैंने प्रलेखन से एक संपादन जोड़ा है।
हैप्पी कोडर

जवाबों:


120

बदलने के:

$authorization = "Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

साथ में:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274";

इसे एक वैध और काम करने वाला प्राधिकरण हेडर बनाने के लिए।


हाय - यह एक ऐसी चीज है जिसे मैंने कोशिश की थी, हालांकि उसी समस्या के साथ। मुझे संदेह है कि समस्या एक एपिजेबिलिटी अपडेट के साथ कुछ हो सकती है, क्योंकि मुझे यह पोस्टमैन पर काम करने के लिए नहीं मिल सकता है।
HappyCoder

पिछले स्थिर संस्करण में ApiGility को वापस लाकर इसे हल किया गया। आपके इनपुट के लिए धन्यवाद, हालांकि मेरा समाधान नहीं है, यह एक समान समस्या वाले अन्य लोगों के लिए एक समाधान है और यह मुझे सही रास्ते पर ले गया। आपके इनपुट के लिए धन्यवाद!
HappyCoder

क्या आप इसके लिए मदद कर सकते हैं? stackoverflow.com/questions/58581568/…
user4271704

38

यह एक CURL फ़ंक्शन है जो डेटा भेज या पुनर्प्राप्त कर सकता है। यह OAuth का समर्थन करने वाले किसी भी PHP ऐप के साथ काम करना चाहिए:

    function jwt_request($token, $post) {

       header('Content-Type: application/json'); // Specify the type of data
       $ch = curl_init('https://APPURL.com/api/json.php'); // Initialise cURL
       $post = json_encode($post); // Encode the data array into a JSON string
       $authorization = "Authorization: Bearer ".$token; // Prepare the authorisation token
       curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // Inject the token into the header
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($ch, CURLOPT_POST, 1); // Specify the request method as POST
       curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Set the posted fields
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // This will follow any redirects
       $result = curl_exec($ch); // Execute the cURL statement
       curl_close($ch); // Close the cURL connection
       return json_decode($result); // Return the received data

    }

एक-तरफ़ा या दो तरफ़ा अनुरोधों के भीतर इसका उपयोग करें:

$token = "080042cad6356ad5dc0a720c18b53b8e53d4c274"; // Get your token from a cookie or database
$post = array('some_trigger'=>'...','some_values'=>'...'); // Array of data with a trigger
$request = jwt_request($token,$post); // Send or retrieve data

किसी ने एक नकारात्मक वोट जोड़ा, क्या आप नीचे टिप्पणी में विस्तार से बता सकते हैं, कृपया।
सर्गडायरेक्ट

2
धन्यवाद सर्ज ... इस तरह से एक कॉल के साथ बहुत लंबे समय तक संघर्ष किया गया। सभी डॉक्स का कहना है कि "http_build_query () के साथ POST सरणी बनाएं।" लेकिन जो काम नहीं करता है - मुझे नहीं पता कि यह एक OAuth ख़ासियत है, लेकिन आपको यहां दिखाने के लिए json_encode की क्या आवश्यकता है। वर्चुअल बीयर भेजी गई।
फ़ोल्डरमार्क

2
@anoldermark मदद के लिए खुशी है। अंगूठे के लिए बहुत धन्यवाद, एक वास्तविक अंतर बनाता है। गुणवत्ता के उत्तर, अपवोट और सकारात्मक टिप्पणी लिखने में समय और प्रयास लगता है ... और लिखने के लिए प्रोत्साहित कर रहे हैं ... और अधिक अच्छा लिखने के लिए;)
सर्गडायरेक्ट

@ सर्गडायरेक्ट, हम फाइल में पोस्ट मान कैसे प्राप्त करेंगे APPURL.com/api/json.php और jwt को कैसे काम करते हैं। कृपया एक उदाहरण दिया।
अंकोला

1
क्या आप इसके लिए मदद कर सकते हैं? stackoverflow.com/questions/58581568/…
user4271704

11

यह काम करना चाहिए

$token = "YOUR_BEARER_AUTH_TOKEN";
//setup the request, you can also use CURLOPT_URL
$ch = curl_init('API_URL');

// Returns the data/output as a string instead of raw data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

//Set your auth headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'Content-Type: application/json',
   'Authorization: Bearer ' . $token
   ));

// get stringified data/output. See CURLOPT_RETURNTRANSFER
$data = curl_exec($ch);

// get info about the request
$info = curl_getinfo($ch);
// close curl resource to free up system resources
curl_close($ch);

4

गुझले का उदाहरण:

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$token = 'your_token';

$httpClient = new Client();

$response = $httpClient->get(
    'https://httpbin.org/bearer',
    [
        RequestOptions::HEADERS => [
            'Accept' => 'application/json',
            'Authorization' => 'Bearer ' . $token,
        ]
    ]
);

print_r($response->getBody()->getContents());

Https://github.com/andriichuk/php-curl-cookbook#bearer-auth देखें



0

यदि आप इसके बजाय एक निजी टोकन के साथ काम कर रहे हैं ( जैसे Gitlab API ), तो आपको प्रतिस्थापित करना चाहिए:

$authorization = "Authorization: Bearer 080042cad6356ad5dc0a720c18b53b8e53d4c274"

साथ में:

$authorization = "PRIVATE-TOKEN 080042cad6356ad5dc0a720c18b53b8e53d4c274";


0
<?php
$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "your api goes here",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Authorization: Bearer eyJ0eciOiJSUzI1NiJ9.eyJMiIsInNjb3BlcyI6W119.K3lW1STQhMdxfAxn00E4WWFA3uN3iIA"
  ),
 ));

$response = curl_exec($curl);
$data = json_decode($response, true);

echo $data;

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