আমি পিএইচপি কার্লের সাথে এইচটিটিপি বেসিক প্রমাণীকরণ ব্যবহার করে কীভাবে একটি অনুরোধ করব?


225

আমি পিএইচপি-তে একটি আরইএসটি ওয়েব পরিষেবা ক্লায়েন্ট তৈরি করছি এবং এই মুহুর্তে আমি পরিষেবাটিতে অনুরোধ করার জন্য কার্ল ব্যবহার করছি।

সত্যায়িত (HTTP বেসিক) অনুরোধগুলি করতে আমি কীভাবে কার্ল ব্যবহার করব? আমাকে কি নিজে হেডার যুক্ত করতে হবে?

উত্তর:


392

তুমি এটা চাও:

curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);  

জেন্ডের একটি REST ক্লায়েন্ট এবং zend_http_client রয়েছে এবং আমি নিশ্চিত যে পিয়ারের কিছু প্রকারের মোড়ক রয়েছে। তবে এটি আপনার নিজের পক্ষে করার পক্ষে যথেষ্ট সহজ।

সুতরাং সম্পূর্ণ অনুরোধটি এর মতো দেখতে লাগবে:

$ch = curl_init($host);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payloadName);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$return = curl_exec($ch);
curl_close($ch);

এটি ব্যবহারকারী এবং পাসওয়ার্ড আলাদাভাবে সেট করার পরে আরও ভাল কাজ করেছে
কিট রামোস

125

CURLOPT_USERPWDমূলত user:passwordনীচের মতো http শিরোনাম সহ স্ট্রিংয়ের বেস 64 প্রেরণ করে :

Authorization: Basic dXNlcjpwYXNzd29yZA==

সুতরাং বাদে CURLOPT_USERPWDআপনি HTTP-Requestশিরোনাম বিকল্পটি পাশাপাশি নীচের মতো অন্যান্য শিরোনাম ব্যবহার করতে পারেন :

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("user:password") // <---
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

CURLOPT_USERPWDআমার পক্ষে কাজ করার পরিবর্তে একটি কাস্টম লেখক শিরোনাম পাস করার এই পদ্ধতিটি ।
আলাপ

40

সরাসরি সিআরএল ব্যবহার করা এটি সবচেয়ে সহজ এবং স্থানীয় উপায়।

এটি আমার পক্ষে কাজ করে:

<?php
$login = 'login';
$password = 'password';
$url = 'http://your.url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
$result = curl_exec($ch);
curl_close($ch);  
echo($result);

7

SOAP এর বিপরীতে, REST কোনও প্রমিত প্রোটোকল নয় তাই "REST ক্লায়েন্ট" থাকা কিছুটা কঠিন। তবে, যেহেতু বেশিরভাগ RESTful পরিষেবাগুলি HTTP কে তাদের অন্তর্নিহিত প্রোটোকল হিসাবে ব্যবহার করে, আপনার কোনও HTTP লাইব্রেরি ব্যবহার করতে সক্ষম হওয়া উচিত। সিআরএল ছাড়াও পিএইচপি পিয়ারের মাধ্যমে এগুলি রয়েছে:

HTTP_Request2

যা প্রতিস্থাপন

HTTP_Request

তারা কীভাবে এইচটিটিপি বেসিক অ্যাথ করেন তা একটি নমুনা

// This will set credentials for basic auth
$request = new HTTP_Request2('http://user:password@www.example.com/secret/');

এছাড়াও ডাইজেস্ট আথ সমর্থন করে

// This will set credentials for Digest auth
$request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);

REST ক্লায়েন্টের দ্বারা আমি এমন কিছু বোঝাতে চাই যা HTTP পেতে, পোস্ট করা, রাখুন, মুছুন ইত্যাদি মুদ্রণের জন্য কার্ল ব্যবহারের কিছু নিম্ন স্তরের বিবরণকে বিমূর্ত করে দেয় যা আমি এটি করার জন্য নিজের পিএইচপি ক্লাস তৈরি করে যা করছি; আমি ভাবছি কেউ ইতিমধ্যে এটি করেছে কিনা।
ফাঁকা

1
হ্যাঁ, তবে HTTP_Request_2 আপনার পক্ষে আগ্রহী হতে পারে। এটি পিএইচপি-তে অনেক ugliest cUrl কে দূরে সরিয়ে দেয়। আপনি যে পদ্ধতিটি ব্যবহার করছেন সেট করতে সেটমথোড (HTTP_Request2 :: METHOD_ *)। পুট এবং পোষ্টগুলির সাথে, অনুরোধের মূল অংশটি সেট করতে আপনি সবেমাত্র বডি সেট করেছেন (<< আপনার এক্সএমএল, জসন, ইত্যাদি এখানে উপস্থাপনা >>)। উপরে বর্ণিত প্রমাণীকরণ। এটিতে এইচটিটিপি রেসপন্সের জন্য বিমূর্ততাও রয়েছে (এমন কিছু যা সিআরএলটির সত্যই অভাব রয়েছে)।
nttood

6

অনুমোদনের ধরণটি যদি বেসিক লেখক এবং ডেটা পোস্ট করা হয় জসন হয় তবে এটি করুন

<?php

$data = array("username" => "test"); // data u want to post                                                                   
$data_string = json_encode($data);                                                                                   
 $api_key = "your_api_key";   
 $password = "xxxxxx";                                                                                                                 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://xxxxxxxxxxxxxxxxxxxxxxx");    
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  
curl_setopt($ch, CURLOPT_POST, true);                                                                   
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     
curl_setopt($ch, CURLOPT_USERPWD, $api_key.':'.$password);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(   
    'Accept: application/json',
    'Content-Type: application/json')                                                           
);             

if(curl_exec($ch) === false)
{
    echo 'Curl error: ' . curl_error($ch);
}                                                                                                      
$errors = curl_error($ch);                                                                                                            
$result = curl_exec($ch);
$returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);  
echo $returnCode;
var_dump($errors);
print_r(json_decode($result, true));

4

ইয়াহু পিএইচপি ব্যবহার করে তাদের আরএসটি পরিষেবাগুলিতে কল করার বিষয়ে একটি টিউটোরিয়াল রয়েছে:

ইয়াহু করুন! ওয়েব পরিষেবাদি আরএসইএসপি পিএইচপি সহ কল ​​করে

আমি নিজে এটি ব্যবহার করি নি, তবে ইয়াহু ইয়াহু এবং কমপক্ষে কিছু স্তরের মানের জন্য গ্যারান্টি দেওয়া উচিত। যদিও তারা PUT এবং মুছে ফেলুন অনুরোধগুলি কভার করে না বলে মনে হচ্ছে।

এছাড়াও, কার্ল_এক্সেক () এবং অন্যান্যতে ব্যবহারকারীর অবদান নোট এবং অন্যান্যতে প্রচুর ভাল তথ্য রয়েছে contain


4

আপনাকে কেবল CURLOPT_HTTPAUTH এবং CURLOPT_USERPWD বিকল্পগুলি নির্দিষ্ট করতে হবে:

$curlHandler = curl_init();

$userName = 'postman';
$password = 'password';

curl_setopt_array($curlHandler, [
    CURLOPT_URL => 'https://postman-echo.com/basic-auth',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
    CURLOPT_USERPWD => $userName . ':' . $password,
]);

$response = curl_exec($curlHandler);
curl_close($curlHandler);

অথবা শিরোনাম নির্দিষ্ট করুন:

$curlSecondHandler = curl_init();

curl_setopt_array($curlSecondHandler, [
    CURLOPT_URL => 'https://postman-echo.com/basic-auth',
    CURLOPT_RETURNTRANSFER => true,

    CURLOPT_HTTPHEADER => [
        'Authorization: Basic ' . base64_encode($userName . ':' . $password)
    ],
]);

$response = curl_exec($curlSecondHandler);
curl_close($curlSecondHandler);

গুজলের উদাহরণ:

use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;

$userName = 'postman';
$password = 'password';

$httpClient = new Client();

$response = $httpClient->get(
    'https://postman-echo.com/basic-auth',
    [
        RequestOptions::AUTH => [$userName, $password]
    ]
);

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

Https://github.com/andriichuk/php-curl-cookbook#basic-auth দেখুন


3

মাইকেল ডওলিংয়ের খুব সক্রিয়ভাবে রক্ষণাবেক্ষণ করা গুজল একটি ভাল উপায়। মার্জিত ইন্টারফেস, অ্যাসিঙ্ক্রোনাস কলিং এবং পিএসআর কমপ্লায়েন্স ছাড়াও, এটি আরএসটি কল মৃতের জন্য প্রমাণীকরণ শিরোনামকে সহজ করে তোলে:

// Create a client with a base URL
$client = new GuzzleHttp\Client(['base_url' => 'http://myservices.io']);

// Send a request to http://myservices.io/status with basic authentication
$response = $client->get('/status', ['auth' => ['username', 'password']]);

দস্তাবেজগুলি দেখুন ।


3

যারা কার্ল ব্যবহার করতে চান না তাদের জন্য:

//url
$url = 'some_url'; 

//Credentials
$client_id  = "";
$client_pass= ""; 

//HTTP options
$opts = array('http' =>
    array(
        'method'    => 'POST',
        'header'    => array ('Content-type: application/json', 'Authorization: Basic '.base64_encode("$client_id:$client_pass")),
        'content' => "some_content"
    )
);

//Do request
$context = stream_context_create($opts);
$json = file_get_contents($url, false, $context);

$result = json_decode($json, true);
if(json_last_error() != JSON_ERROR_NONE){
    return null;
}

print_r($result);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.