बाहरी HTTP से Laravel से HTTP अनुरोध करना


157

मैं जो चाहता हूं उसे एक एपीआई से एक HTTP (जैसे, jQuery के AJAX) के साथ एक बाहरी एपीआई के लिए अनुरोध मिलता है। मैं कैसे शुरू करूँ? मैंने श्री Google पर शोध किया लेकिन मुझे कुछ भी मदद नहीं मिली।

मुझे आश्चर्य है कि यह भी संभव है शुरू कर रहा है? इस पोस्ट में Laravel 4 कंट्रोलर से एक्सटर्नल url में डेटा के साथ पोस्ट रिक्वेस्ट करता है, ऐसा लगता है कि यह किया जा सकता है। लेकिन न तो कोई उदाहरण है और न ही कोई स्रोत है जहां कुछ दस्तावेज खोजने के लिए।

कृपया मेरी मदद करें?


9
लंबे समय बाद, वास्तव में एक छोटा सा टट बनाया गया कि गज़ल का उपयोग कैसे किया जाए। उनके जवाब से अनिसोइन। chilion.nl/laravel-post-requests-with-guzzle
चिलियन

यदि फिर भी आप इसके लिए कर्ल का उपयोग कर सकते हैं, तो मुझे लगता है कि आप कह सकते हैं कि कर्ल किसी न किसी रूप में PHP के लिए jquery ajax है।
किलस्ट्रीट

जवाबों:


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
@Chilion, अल स्नोक WAS आपको एक आधिकारिक लारवेल पैकेज की ओर निर्देशित कर रहा था। यह लारवेल विक्रेता समूह में पहले से स्थापित है।
पार्कर_कोड्स

json स्ट्रिंग के बजाय एक स्ट्रीम ऑब्जेक्ट प्राप्त करना। क्या कोई मेरी मदत कर सकता है?
रेनन कोल्हो

मैं एक ही काम कर रहा हूं, लेकिन मेरा ब्राउज़र असीम रूप से बदल गया है
अमीरोच ज़ेगैग

अब Laravel में एक आसान तरीका है 7.x: stackoverflow.com/a/60908329/2341298
चक्रवात

95

हम पैकेज गुज़ेले को लारवेल में उपयोग कर सकते हैं, यह HTTP अनुरोध भेजने के लिए एक PHP HTTP क्लाइंट है।

आप संगीतकार के माध्यम से गज़ल स्थापित कर सकते हैं

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

आप केवल एक बाहरी URL को कॉल करना चाहते हैं और परिणामों का उपयोग करना चाहते हैं? अगर हम JSON सेवारत किसी साधारण GET अनुरोध के बारे में बात कर रहे हैं, तो PHP इसे आउट ऑफ द बॉक्स करती है:

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

यदि आप एक पोस्ट अनुरोध करना चाहते हैं, तो यह थोड़ा कठिन है लेकिन कर्ल के साथ ऐसा करने के लिए कई उदाहरण हैं।

तो मुझे लगता है कि सवाल है; तुम्हारी वास्तव में इच्छा क्या है?


मैं एक REST एपीआई के सभी प्रकार के कार्यों का उपयोग करने में सक्षम होना चाहता हूं। तो हां, मुझे POST की आवश्यकता होगी। मैंने सोचा (आशा है ...) कि लारवेल के पास लारावेल थोड़े तरीके से इसे करने के लिए कुछ तरीके होंगे, लेकिन मैं पीएचपी से चिपके रहूंगा। धन्यवाद।
चिल्लियन

यदि आपको परिणाम की आवश्यकता नहीं है, तो बस एपीआई को हिट करने या URL को पिंग करने की कोशिश कर रहा है, यह सबसे अच्छा तरीका है। धन्यवाद :)
रफीक फरहाद

7

21 मार्च 2019 को अपडेट किया गया

GuzzleHttpपैकेज का उपयोग कर जोड़ेंcomposer require guzzlehttp/guzzle:~6.3.3

या आप अपने प्रोजेक्ट में एक निर्भरता के रूप में गज़ल को निर्दिष्ट कर सकते हैं composer.json

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

उस वर्ग के शीर्ष में नीचे की पंक्ति को शामिल करें जहाँ आप एपीआई कॉल कर रहे हैं

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 क्लाइंट के चारों ओर लिपटी एक न्यूनतम एपीआई के साथ आती है । यह 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

निश्चित रूप से, किसी भी PHP परियोजना के लिए, आप अनुरोध भेजने के लिए GuzzleHTTP का उपयोग करना चाह सकते हैं। Guzzle के पास बहुत अच्छे दस्तावेज हैं जिन्हें आप यहाँ देख सकते हैं । मैं सिर्फ इतना कहना चाहता हूं कि, आप शायद अपने लावेले प्रोजेक्ट के किसी भी घटक में उदाहरण के लिए गज़ल के ग्राहक वर्ग के उपयोग को केंद्रीकृत करना चाहते हैं (उदाहरण के लिए एक विशेषता) लारवेल के कई नियंत्रकों और घटकों पर ग्राहक उदाहरण बनाने के बजाय (कई लेखों के रूप में) और जवाब दें सुझाव)।

मैंने एक विशेषता बनाई जिसे आप उपयोग करने का प्रयास कर सकते हैं, जो आपको अपने लारवेल परियोजना के किसी भी घटक से अनुरोध भेजने की अनुमति देता है, बस इसका उपयोग करके और कॉल करने के लिए 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

आप Httpful का उपयोग कर सकते हैं:

वेबसाइट: http://phphttpclient.com/

गिथब: https://github.com/nategood/httpful


बहुत अच्छा लग रहा है, हालांकि यह मेरे सवाल का जवाब वास्तव में एक लार्वा थोड़े रास्ते के बारे में नहीं देता है, मुझे यकीन है कि इस पर गौर करेंगे। धन्यवाद!
चिलियन

1
लारवेल ने इसे बॉक्स से बाहर नहीं निकाला है, लेकिन लारवेल संगीतकार के तहत चलते हैं ताकि आप काम को पूरा करने के लिए Httpful जैसे एक काम का उपयोग कर सकें। वैसे आप भी उपयोग कर सकते हैं requests.ryanmccue.info
जेरेमी Ges

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