এইচটিটিপি করা কোনও বাহ্যিক এপিআই-তে ল্যারাভেল থেকে অনুরোধ করে


157

আমি যা চাই তা হ'ল কোনও বহিরাগত এপিআই-তে একটি HTTP (যেমন, jQuery এর এজেএক্স) অনুরোধ সহ একটি API থেকে কোনও অবজেক্ট পাওয়া। আমি কিভাবে শুরু করব? আমি মিঃ গুগলে গবেষণা করেছি কিন্তু সাহায্য করার মতো কিছুই পাই না।

আমি ভাবতে শুরু করি এটা কি সম্ভব? এই পোস্টে লারাভেল 4 কন্ট্রোলার থেকে ডেটা সহ বাইরের ইউআরএলকে অনুরোধ করে পোস্ট করার অনুরোধ যা এটি করা যেতে পারে বলে মনে হয়। তবে এর কোনও উদাহরণ বা কোনও উত্স নেই যেখানে কিছু ডকুমেন্টেশন সন্ধান করতে হবে।

আমাকে সাহায্য করুন?


9
দীর্ঘ সময় পরে, গুজল কীভাবে ব্যবহার করতে হয় তা একটি সত্যই ছোট্ট টিট তৈরি করেছে। আইসনেক থেকে তার উত্তর। chilion.nl/laravel-post-requests-with-guzzle
কিলিয়োন

যদি এখনও আগ্রহী হয় তবে আপনি এর জন্য কার্লও ব্যবহার করতে পারেন, আমি অনুমান করতে পারি আপনি বলতে পারেন কার্লটি কোনও কোনও ফর্মের মধ্যে পিএইচপি এর jquery আজাক্স।
হত্যাকারী

উত্তর:


195

অনুরূপ প্রশ্নের উত্তরের ভিত্তিতে এখানে: https://stackoverflow.com/a/22695523/1412268

গুজল একবার দেখুন

$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', ['auth' =>  ['user', 'pass']]);
echo $res->getStatusCode(); // 200
echo $res->getBody(); // { "type": "User", ....

2
এছাড়াও জেরেমি গেসের উত্তর দেখুন, দুর্দান্ত দেখাচ্ছে, যদিও এটি কোনও লারাভেল কিন্ডা পদ্ধতি সম্পর্কে আমার প্রশ্নের উত্তর দেয় না, তবে আমি অবশ্যই এটি খতিয়ে দেখব। ধন্যবাদ!
চিলিয়ন

3
@ চিলিয়ন, আল স্নোইক আপনাকে অফিসিয়াল লারাভেল প্যাকেজের দিকে পরিচালিত করছে। এটি লারাভেল বিক্রেতা গ্রুপে প্রাক ইনস্টল করা আছে।
পার্কার_কোড

আমি জসন স্ট্রিংয়ের পরিবর্তে একটি স্ট্রিম অবজেক্ট পাচ্ছি। কেউ আমাকে সাহায্য করতে পারেন?
রেনান কোয়েলহো

আমি একই জিনিসটি করছি তবে আমার ব্রাউজারটি অসীম দিকে ফিরে গেছে
আমিরোচে জেগগা

এখন Laravel 7.x মধ্যে একটি সহজ উপায় আছে: stackoverflow.com/a/60908329/2341298
Syclone

95

আমরা ল্যারাভেলে প্যাকেজ গুজল ব্যবহার করতে পারি, এইচটিটিপি অনুরোধগুলি প্রেরণ করা এটি একটি PHP এইচটিটিপি ক্লায়েন্ট।

আপনি সুরকারের মাধ্যমে গুজল ইনস্টল করতে পারেন

composer require guzzlehttp/guzzle:~6.0

অথবা আপনি গুজলকে আপনার প্রকল্পের বিদ্যমান রচয়িতা জেসসনে নির্ভরতা হিসাবে নির্দিষ্ট করতে পারেন

{
   "require": {
      "guzzlehttp/guzzle": "~6.0"
   }
}

নীচে দেখানো হয়েছে গুজল ব্যবহার করে লারাভেল 5 তে উদাহরণ কোড,

use GuzzleHttp\Client;
class yourController extends Controller {

    public function saveApiData()
    {
        $client = new Client();
        $res = $client->request('POST', 'https://url_to_the_api', [
            'form_params' => [
                'client_id' => 'test_id',
                'secret' => 'test_secret',
            ]
        ]);
        echo $res->getStatusCode();
        // 200
        echo $res->getHeader('content-type');
        // 'application/json; charset=utf8'
        echo $res->getBody();
        // {"type":"User"...'
}

2
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। এছাড়াও আমার পোস্টের নীচে আমার মন্তব্য দেখুন; দীর্ঘ সময় পরে, গুজল কীভাবে ব্যবহার করতে হয় তা একটি সত্যই ছোট্ট টিট তৈরি করেছে। আইসনেক থেকে তার উত্তর। chilion.nl/laravel-post-requests-with-guzzle - কিলিয়োন আগস্ট 19 12:09 এ √
কিলিয়োন

1
আপনার মন্তব্যটি // "200"হওয়া উচিত // 200কারণ প্রত্যাবর্তিত মানটি একটি পূর্ণসংখ্যা।
যান্ত্রিক

57

আপনি কেবল একটি বাহ্যিক ইউআরএল কল করতে এবং ফলাফলগুলি ব্যবহার করতে চান? পিএইচপি বাক্সের বাইরে এটি করে, যদি আমরা JSON পরিবেশন করার কিছু সাধারণ GET অনুরোধ সম্পর্কে কথা বলি:

$json = json_decode(file_get_contents('http://host.com/api/stuff/1'), true);

আপনি যদি কোনও পোস্টের অনুরোধটি করতে চান তবে এটি কিছুটা শক্ত কিন্তু কার্ল দিয়ে কীভাবে এটি করা যায় তার প্রচুর উদাহরণ রয়েছে।

সুতরাং আমি অনুমান করি প্রশ্নটি; আপনি ঠিক কি চান?


আমি একটি REST এপিআই এর সমস্ত ধরণের ফাংশন ব্যবহার করতে সক্ষম হতে চাই। হ্যাঁ, আমার পোস্ট দরকার। আমি ভেবেছিলাম (আশা করি ...) যে লারাভেলকে লারাভেল কিন্ডায় কিছু করার জন্য কিছু পদ্ধতি থাকতে পারে তবে আমি পিএইচপি এর সাথে লেগে থাকব। ধন্যবাদ।
চিলিয়ন

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

7

21 মার্চ 2019 এ আপডেট হয়েছে

GuzzleHttpব্যবহার করে প্যাকেজ যুক্ত করুনcomposer require guzzlehttp/guzzle:~6.3.3

অথবা আপনি গুজলকে আপনার প্রকল্পের নির্ভরতা হিসাবে নির্দিষ্ট করতে পারেন composer.json

{
   "require": {
      "guzzlehttp/guzzle": "~6.3.3"
   }
}

ক্লাসের শীর্ষে লাইনটি নীচে অন্তর্ভুক্ত করুন যেখানে আপনি API টি ডাকছেন

use GuzzleHttp\Client;

অনুরোধ করার জন্য নীচে কোড যুক্ত করুন

$client = new Client();

    $res = $client->request('POST', 'http://www.exmple.com/mydetails', [
        'form_params' => [
            'name' => 'george',
        ]
    ]);

    if ($res->getStatusCode() == 200) { // 200 OK
        $response_data = $res->getBody()->getContents();
    }

7

এর মতো Laravel v7.X , ফ্রেমওয়ার্ক এখন প্রায় আবৃত একটি ন্যূনতম এপিআই দিয়ে আসে মদ্যপানোত্সব HTTP- র ক্লায়েন্ট । এটি এইচটিটিপি ক্লায়েন্ট ব্যবহার করে অনুরোধগুলি পাওয়া , পোস্ট করা , রাখা , প্যাচ করা এবং মুছার সহজ উপায় সরবরাহ করে :

use Illuminate\Support\Facades\Http;

$response = Http::get('http://test.com');
$response = Http::post('http://test.com');
$response = Http::put('http://test.com');
$response = Http::patch('http://test.com');
$response = Http::delete('http://test.com');

Illuminate\Http\Client\Responseফিরে আসা ইনস্ট্যান্সের দ্বারা সরবরাহিত পদ্ধতির সেট ব্যবহার করে আপনি প্রতিক্রিয়া পরিচালনা করতে পারেন ।

$response->body() : string;
$response->json() : array;
$response->status() : int;
$response->ok() : bool;
$response->successful() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
$response->header($header) : string;
$response->headers() : array;

দয়া করে নোট করুন যে আপনাকে অবশ্যই গুজল ইনস্টল করতে হবে:

composer require guzzlehttp/guzzle

আরও অনেকগুলি সহায়ক বৈশিষ্ট্যগুলি অন্তর্নির্মিত রয়েছে এবং আপনি এখানে বৈশিষ্ট্যের এই সেটগুলি সম্পর্কে আরও জানতে পারেন: https://laravel.com/docs/7.x/http-client

লারাভেলের মধ্যে এটি অবশ্যই বাহ্যিক এপিআই কল করার সহজতম উপায়।


5

অবশ্যই, কোনও পিএইচপি প্রকল্পের জন্য, আপনি অনুরোধগুলি প্রেরণের জন্য গুজলএইচটিটিপি ব্যবহার করতে পারেন। গুজলের খুব সুন্দর ডকুমেন্টেশন রয়েছে আপনি এখানে পরীক্ষা করতে পারেন । আমি কেবল এটিই বলতে চাই যে আপনি সম্ভবত লারাভেল প্রকল্পের কোনও উপাদান (উদাহরণস্বরূপ একটি বৈশিষ্ট্য) এর অধীনে লারাভেলের বেশ কয়েকটি নিয়ামক এবং উপাদানগুলিতে ক্লায়েন্টের উদাহরণ তৈরি করার পরিবর্তে (অনেক নিবন্ধ হিসাবে) গুজলের ক্লায়েন্ট শ্রেণির ব্যবহারকে কেন্দ্রিয় করতে চান এবং জবাবগুলি পরামর্শ দেয়)।

আমি এমন একটি বৈশিষ্ট্য তৈরি করেছি যা আপনি ব্যবহার করার চেষ্টা করতে পারেন, যা আপনাকে আপনার লারাভেল প্রকল্পের যে কোনও উপাদান থেকে অনুরোধ প্রেরণ করার অনুমতি দেয়, কেবল এটি ব্যবহার করে এবং কল করে makeRequest

namespace App\Traits;
use GuzzleHttp\Client;
trait ConsumesExternalServices
{
    /**
     * Send a request to any service
     * @return string
     */
    public function makeRequest($method, $requestUrl, $queryParams = [], $formParams = [], $headers = [], $hasFile = false)
    {
        $client = new Client([
            'base_uri' => $this->baseUri,
        ]);

        $bodyType = 'form_params';

        if ($hasFile) {
            $bodyType = 'multipart';
            $multipart = [];

            foreach ($formParams as $name => $contents) {
                $multipart[] = [
                    'name' => $name,
                    'contents' => $contents
                ];
            }
        }

        $response = $client->request($method, $requestUrl, [
            'query' => $queryParams,
            $bodyType => $hasFile ? $multipart : $formParams,
            'headers' => $headers,
        ]);

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

        return $response;
    }
}

লক্ষ্য করুন এই বৈশিষ্ট্য এমনকি ফাইল প্রেরণ পরিচালনা করতে পারে।

আপনি যদি এই বৈশিষ্ট্যটি লারাভেলের সাথে সংহত করতে এই বৈশিষ্ট্য এবং কিছু অন্যান্য জিনিস সম্পর্কে আরও বিশদ চান তবে এই নিবন্ধটি দেখুন । তদ্ব্যতীত, যদি এই বিষয়ে আগ্রহী হয় বা বড় সহায়তার প্রয়োজন হয়, আপনি আমার কোর্সটি গ্রহণ করতে পারেন যা আপনাকে পুরো প্রক্রিয়াটিতে গাইড করে।

আমি আশা করি এটি আপনার সকলকে সহায়তা করে।

শুভ কামনা :)


1

আপনি এইচটিপিফুল ব্যবহার করতে পারেন:

ওয়েবসাইট: http://phphttpclient.com/

গিথুব: https://github.com/nategood/httpful


দেখতে দুর্দান্ত লাগছে, যদিও এটি লারাভেল কিন্ডা পদ্ধতি সম্পর্কে আমার প্রশ্নের উত্তর দেয় না, তবে আমি অবশ্যই এটি খতিয়ে দেখব। ধন্যবাদ!
চিলিয়ন

1
লারাভেল এটিকে বাক্স থেকে সরিয়ে ফেলেনি, তবে লারাভেল সুরকারের অধীনে চলেছে যাতে আপনি এই কাজটি করতে Httpful এর মত একটি লাইব ব্যবহার করতে পারেন। উপায় দ্বারা আপনি অনুরোধগুলিও
Rrymmueue.info

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